Objdump

Aus Lowlevel
Wechseln zu:Navigation, Suche

objdump ist ein mächtiges Werkzeug aus den binutils für Unix. Es ermöglicht, (Objekt)-Code zu disassemblieren und verschiedenste Informationen zu einer Objektdatei zu erhalten.


objdump in der OS-Entwicklung

In der OS-Entwicklung ist objdump ein unentbehrliches Werkzeug. Mit objdump lassen sich z.B. schnell und einfach Symbolnamen anzeigen.


Crashkurs

Um die Symboltabelle einer Objektdatei zu bekommen, gibt man

objdump -t DATEI

ein. Die Ausgabe sieht dann z.B. so aus bei einem einfachen "Hallo-Welt"-Programm in C:

hello.o: file format elf32-i386

SYMBOL TABLE: 00000000 l df *ABS* 00000000 hello.c 00000000 l d .text 00000000 .text 00000000 l d .data 00000000 .data 00000000 l d .bss 00000000 .bss 00000000 l d .rodata 00000000 .rodata 00000000 l d .note.GNU-stack 00000000 .note.GNU-stack 00000000 l d .comment 00000000 .comment 00000000 g F .text 0000002b main 00000000 *UND* 00000000 puts

Um die dynamische Symboltabelle zu bekommen, nutzt man

objdump -T DATEI

Per

objdump -d DATEI

lässt sich eine Datei (bzw. der ausführbare Teil) disassemblieren und auf der Kommandozeile ausgeben. Alternativ lässt sich die Ausgabe natürlich auch Umleiten:

objdump -d DATEI > output.<

Um eine Datei komplett zu disassemblieren, nutzt man

objdump -D DATEI

Mit dem Schalter -S versucht objdump, originalen Sourcecode herauszufinden und diesen mit dem disassemblierten Code zu vermischen. Der Schalter -l gibt zusätzlich Zeilennummern aus dem ursprünglichen Sourcecode aus (wenn dies möglich ist). Mit "-M intel-mnemonic" wird der Assemblercode nicht in der AT&T-Syntax, sondern in der Intelsyntax ausgegeben.


Weblinks