Wie kann ich prüfen Inhalt eines Datenabschnitts einer ELF-Datei auf Linux?
-
18-09-2019 - |
Frage
Ich habe objdump
benutze in Linux ELF-Binärdateien in Assembler-Code zu suchen.
Manchmal gibt es einen indirekten Sprung über eine Sprungtabelle, die in den rodata
gespeichert (Nur-Lese-Daten) -Abschnitt.
Wie kommt man objdump
oder ein anderes Werkzeug mir den Inhalt dieses Datenabschnitts zu zeigen?
Ich konnte das Programm ausführen und die entsprechenden Adressen im Debugger untersuchen, aber ich möchte nicht, dass tun, weil es interaktiv getan werden.
Die ideale Antwort wird ein Tool identifizieren, die mir nicht nur den Inhalt zeigen wird, aber lassen Sie mich das Anzeigeformat steuern, so wie od
der Fall ist.
Lösung
objdump -s -j .rodata exefile
gibt ein Side-by-Side-hex / druckbaren ASCII-Dump des Inhalts des rodata
Abschnitts wie:
Contents of section .rodata:
0000 67452301 efcdab89 67452301 efcdab89 gE#.....gE#.....
0010 64636261 68676665 64636261 68676665 dcbahgfedcbahgfe
Es sieht nicht wie es da etwas gibt, in der Formatierung zu kontrollieren, aber es ist ein Anfang. Man konnte immer die Hex undump und ihn an od, nehme ich an:)
Andere Tipps
readelf -x .rodata hello_world.o
gibt:
Hex dump of section '.rodata':
0x00000000 48656c6c 6f20776f 726c6421 0a Hello world!.
Sie sollten readelf
bevorzugen, wenn möglich, da objdump
einfach nicht einige Abschnitte wie .symtab
besagt: Warum objdump nicht zeigen .bss, .shstratab, .symtab und .strtab Abschnitte?
Sie können auch das rohe Bytes mit den Techniken bei erwähnt extrahieren: wie extrahieren Sie nur den Inhalt eines ELF Abschnitt und wie erwähnt von ysdx .
Sie können die RAW bekommen (nicht HexDump-ed) ELF Abschnitt mit:
# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat
Hier bin ich mit | cat
um stdout zu zwingen, ein Rohr zu sein. /dev/stdout
möglicherweise unerwartet funktionieren, wenn stdout eine Datei ist. .text=-
nicht an stdout, sondern an die -
Datei.
objcopy und objdump einige Mängel haben (weil sie basieren auf BFD, die unterschiedliche ausführbare Formate abstrahiert).
Update: schrieb ich ein Werkzeug dies zu tun, die sich nicht auf BFD.