¿Cuál es la diferencia entre .got y .got.plt sección en formato ELF?¿Cuál es la diferencia entre la sección .got y .got.plt?
Respuesta
Mi comentario anterior parece ser correcto, el ejemplo a continuación deja las cosas un poco claras.
Estos son los traslados por mis 32 bits de i686-linux /lib/libm.so
Relocation section '.rel.dyn' at offset 0x32b8 contains 8 entries:
Offset Info Type Sym.Value Sym. Name
00025030 00000008 R_386_RELATIVE
00024fd8 00005706 R_386_GLOB_DAT 00025034 _LIB_VERSION
00024fdc 00000406 R_386_GLOB_DAT 00000000 __gmon_start__
00024fe0 00000506 R_386_GLOB_DAT 00000000 _Jv_RegisterClasses
00024fe4 00000806 R_386_GLOB_DAT 00000000 _rtld_global_ro
00024fe8 00000906 R_386_GLOB_DAT 00000000 stderr
00024fec 00013006 R_386_GLOB_DAT 0002507c signgam
00024ff0 00000e06 R_386_GLOB_DAT 00000000 __cxa_finalize
Relocation section '.rel.plt' at offset 0x32f8 contains 12 entries:
Offset Info Type Sym.Value Sym. Name
00025000 00000107 R_386_JUMP_SLOT 00000000 fputs
00025004 00000207 R_386_JUMP_SLOT 00000000 __errno_location
00025008 00000307 R_386_JUMP_SLOT 00000000 sprintf
0002500c 00000407 R_386_JUMP_SLOT 00000000 __gmon_start__
00025010 00000607 R_386_JUMP_SLOT 00000000 strtod
00025014 00000707 R_386_JUMP_SLOT 00000000 __assert_fail
00025018 00000a07 R_386_JUMP_SLOT 00000000 strlen
0002501c 00000b07 R_386_JUMP_SLOT 00000000 strtof
00025020 00000c07 R_386_JUMP_SLOT 00000000 fwrite
00025024 00000d07 R_386_JUMP_SLOT 00000000 strtold
00025028 00005e07 R_386_JUMP_SLOT 00005970 matherr
0002502c 00000e07 R_386_JUMP_SLOT 00000000 __cxa_finalize
mirada que como usted señaló que hay dos secciones de reubicación, a saber .rel.dyn y .rel.plt. Puede ver que todas las reubicaciones para .rel.plt son de tipo R_386_JUMP_SLOT, lo que significa que son deslocalizaciones de sucursales, por otro lado, casi todas las reubicaciones en .rel.dyn son R_386_GLOB_DAT, lo que significa la reubicación de variables globales.
Otra diferencia sutil existe entre .symtab y .dynsym. Mientras que la primera contiene referencias para todos los símbolos utilizados durante la edición del enlace estático, los últimos contienen solo los símbolos necesarios para la vinculación dinámica. Por lo tanto, las reubicaciones mencionadas anteriormente se refieren solo a la sección .dynsym.
- 1. ¿Cuál es la diferencia entre mutex y sección crítica?
- 2. ¿Cuál es la diferencia entre {0} y ""?
- 3. Cuál es la diferencia entre = y: =
- 4. ¿Cuál es la diferencia entre .ToString (+) y ""
- 5. Cuál es la diferencia entre $ (...) y `...`
- 6. ¿cuál es la diferencia entre:.! y: r !?
- 7. ¿Cuál es la diferencia entre ".equals" y "=="?
- 8. ¿Cuál es la diferencia entre dict() y {}?
- 9. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 10. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 11. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 12. ¿Cuál es la diferencia entre + = y = +?
- 13. ¿Cuál es la diferencia entre " " y ""?
- 14. Cuál es la diferencia entre $ y jQuery
- 15. Cuál es la diferencia entre la función() {}() y la función() {}()
- 16. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 17. ¿Cuál es la diferencia entre JSF y Facelets?
- 18. ¿Cuál es la diferencia entre todos los proyectos y subproyectos
- 19. ¿Cuál es la diferencia entre KERN_INVALID_ADDRESS y KERN_PROTECTION_FAILURE?
- 20. ¿Cuál es la diferencia entre '() y (lista) en Clojure?
- 21. ¿Cuál es la diferencia entre función (myVar) y (función) myVar?
- 22. ¿Cuál es la diferencia entre la vinculación estática y dinámica?
- 23. ¿Cuál es la diferencia entre el colado y la coerción?
- 24. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 25. ¿Cuál es la diferencia entre el casting y la conversión?
- 26. ¿Cuál es la diferencia entre WPF y la aplicación Silverlight?
- 27. ¿Cuál es la diferencia entre uno mismo y la ventana?
- 28. ¿Cuál es la diferencia entre CookieContainer y la colección Response.Cookies?
- 29. ¿Cuál es la diferencia entre la relación Composición y Asociación?
- 30. ¿cuál es la diferencia entre el material y la textura?
De acuerdo con: http://www.acsu.buffalo.edu/~charngda/elf.html '.got' las entradas nunca se resuelven perezosamente, pero las entradas' .got.plt' se pueden resolver perezosamente. – ninjalj
Creo que .got es para reubicaciones relacionadas con 'variables' globales, mientras que .got.plt es una sección auxiliar para actuar junto con .plt cuando se resuelven las direcciones absolutas de los procedimientos. – JohnTortugo