Ich habe verwendet objdump
, um Assembler-Code in Linux ELF-Binärdateien zu betrachten.
Manchmal gibt es einen indirekten Sprung durch eine Sprungtabelle, die im rodata
Abschnitt (schreibgeschützte Daten) gespeichert ist .
Wie bekomme ich objdump
oder ein anderes Tool, um mir den Inhalt dieses Datenabschnitts zu zeigen?
Ich könnte das Programm ausführen und die relevanten Adressen im Debugger untersuchen, aber ich möchte das nicht tun, weil es interaktiv erfolgen muss.
Die ideale Antwort identifiziert ein Tool, mit dem ich nicht nur den Inhalt anzeigen, sondern auch das Anzeigeformat steuern kann od
.
quelle
gibt:
Sie sollten es vorziehen,
readelf
wenn dies möglich ist, daobjdump
einige Abschnitte wie.symtab
: Warum zeigt objdump keine .bss-, .shstratab-, .symtab- und .strtab-Abschnitte an?Sie können auch das rohe Bytes mit den Techniken extrahieren erwähnt: Wie kann man nur den Inhalt eines ELF Abschnitt extrahiert und wie bereits erwähnt durch ysdx .
quelle
Sie können den RAW-ELF-Abschnitt (nicht hexdumped) erhalten mit:
Hier benutze ich,
| cat
um stdout zu zwingen, eine Pipe zu sein./dev/stdout
funktioniert möglicherweise unerwartet, wenn stdout eine Datei ist..text=-
sendet nicht an stdout, sondern an die-
Datei.Jedoch objcopy und objdump einige Mängel haben (weil sie auf BFD beruhen , die verschiedenen ausführbaren Formate abstrahiert).
Update: Ich habe dazu ein Tool geschrieben , das nicht auf BFD basiert.
quelle
--dump-section
ist ein bisschen neu. Es wurde hinzugefügt unter: sourceware-org.1504.n7.nabble.com/… Warum ist es besser als--only-section
?objcopy -j
erstellt eine ganze ELF-Datei (die ein ELF-Header, eine Abschnitts-Header-Tabelle mit einem .shstrtab-Abschnitt, eine Programm-Header-Tabelle), währendobjcopy --dump-section
der Inhalt eines Abschnitts (und sonst nichts) ausgegeben wird. zu einer Datei.