Objdump
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.