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.

58

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:)

75
répondu hobbs 2015-10-22 09:09:36
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 .

16

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.

9
répondu ysdx 2017-05-23 11:54:43