Comment puis-je examiner le contenu d'une section de données d'un fichier ELF sur Linux?
j'ai utilisé objdump
pour regarder le code d'assemblage dans les binaires ELF Linux.
parfois, il y a un saut indirect à travers une table de saut qui est stockée dans la section rodata
(données en lecture seule).
comment obtenir objdump
ou tout autre outil pour me montrer le contenu de cette section de données?
je pourrais exécuter le programme et examiner les adresses pertinentes dans le débogueur, mais je ne veux pas faire cela parce que il doit être fait de manière interactive.
la réponse idéale identifiera un outil qui non seulement me montrera le contenu mais me permettra de contrôler le format d'affichage, tout comme od
le fait.
3 réponses
objdump -s -j .rodata exefile
donne un dépotoir côte à côte/imprimable ASCII du contenu de la section rodata
comme:
Contents of section .rodata:
0000 67452301 efcdab89 67452301 efcdab89 gE#.....gE#.....
0010 64636261 68676665 64636261 68676665 dcbahgfedcbahgfe
on dirait qu'il n'y a rien là-dedans pour contrôler le formatage, mais c'est un début. Vous pourriez toujours faire tomber le sort et le donner à od, je suppose:)
readelf -x .rodata hello_world.o
donne:
Hex dump of section '.rodata':
0x00000000 48656c6c 6f20776f 726c6421 0a Hello world!.
vous devriez préférer readelf
quand c'est possible car objdump
ne montre tout simplement pas certaines sections comme .symtab
: pourquoi objdump ne montre pas .sev, .shstratab,.symtab et .strtab sections?
vous pouvez également extraire les octets bruts avec les techniques mentionnées à: comment extraire seulement le contenu d'une section ELF et comme mentionné par ysdx .
vous pouvez obtenir la section ELF brute (pas hexdump-ed) avec:
# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat
ici, j'utilise | cat
pour forcer stdout à être un tuyau. /dev/stdout
peut fonctionner de manière inattendue si stdout est un fichier. .text=-
n'envoie pas à stdout mais au fichier -
.
Toutefois objcopy et objdump ont certaines déficiences (parce qu'ils sont basés sur BFD) qui résume les différents exécutables formats).
mise à Jour: j'ai écrit un outil à faire ce qui ne dépend pas de BFD.