Qual è la differenza tra la sezione .got e .got.plt in formato ELF?Qual è la differenza tra la sezione .got e .got.plt?
risposta
mio commento precedente risulta essere di destra, l'esempio seguente rende le cose un po 'chiare.
Queste sono le delocalizzazioni per i miei 32 bit 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
look che come avrete notato ci sono due sezioni di trasferimento, vale a dire .rel.dyn e .rel.plt. Si può vedere che tutti i trasferimenti per .rel.plt sono di tipo R_386_JUMP_SLOT il che significa che essi sono delocalizzazioni ramo d'altra parte quasi tutti i trasferimenti in .rel.dyn sono R_386_GLOB_DAT che significa delocalizzazione per le variabili globali.
Un'altra differenza sottile esistono tra .symtab e .dynsym. Mentre il primo contiene riferimenti per tutti i simboli utilizzati durante la modifica del collegamento statico, i successivi contengono solo i simboli necessari per il collegamento dinamico. Pertanto, le delocalizzazioni menzionate sopra si riferiscono solo alla sezione .dynsym.
- 1. Qual è la differenza tra mutex e sezione critica?
- 2. Qual è la differenza tra Verilog! e ~?
- 3. Qual è la differenza tra = e: =
- 4. Qual è la differenza tra? : e ||
- 5. qual è la differenza tra [[], []] e [[]] * 2
- 6. Qual è la differenza tra $ e $$?
- 7. Qual è la differenza tra ("") e (null)
- 8. Qual è la differenza tra dict() e {}?
- 9. Qual è la differenza tra " " e ""?
- 10. Qual è la differenza tra {0} e ""?
- 11. Qual è la differenza tra `##` e `hashCode`?
- 12. Qual è la differenza tra {0} e +?
- 13. Qual è la differenza tra .ToString() e + ""
- 14. qual è la differenza tra:.! e: r !?
- 15. Qual è la differenza tra la sezione .rodata e .rodata.str1.4 nell'output compilato per stringhe letterali?
- 16. Qual è la differenza tra i segmenti .rdata e .idata?
- 17. Unix: Qual è la differenza tra la fonte e l'esportazione?
- 18. Qual è la differenza tra il callback e la promessa
- 19. Qual è la differenza tra la lista() e []
- 20. Qual è la differenza tra GHC e la piattaforma Haskell?
- 21. Qual è la differenza tra sé e la finestra?
- 22. Qual è la differenza tra la cartella vim72 e vimfiles?
- 23. Qual è la differenza tra la serratura e RLock
- 24. Qual è la differenza tra la funzione() {}() e function() {}()
- 25. Qual è la differenza tra la crittografia SHA e AES?
- 26. Qual è la differenza tra la [OptionalField] e [NonSerialized]
- 27. Qual è la differenza tra buildscript e allprojects in build.gradle?
- 28. Qual è la differenza tra x: Reference e ElementName?
- 29. Qual è la differenza tra tutti i progetti e sottoprogetti
- 30. Qual è la differenza tra Section e Stack in Blade?
Secondo: http://www.acsu.buffalo.edu/~charngda/elf.html 'voci .got' non vengono mai risolti pigramente, ma' voci .got.plt' possono essere risolti pigramente. – ninjalj
Penso .got è per le delocalizzazioni in materia di 'variabili' globali, mentre .got.plt è una sezione ausiliaria di agire insieme con Plt durante la risoluzione delle procedure indirizzi assoluti. – JohnTortugo