objdump aus den GNU Binutils zeigt Informationen über Objekt- und Binärdateien an und arbeitet als Disassembler: Es übersetzt Maschinencode zurück in Assembler. Damit lässt sich nachvollziehen, was der Compiler aus dem Quellcode erzeugt hat, oder eine fremde Binärdatei untersuchen.
Disassembly
objdump -d ./programm # ausführbare Sektionen disassemblieren
objdump -D ./programm # alle Sektionen disassemblieren
objdump -d -M intel ./programm # Intel-Syntax (x86) statt AT&T
objdump -S ./programm # Quellcode und Assembler gemischt (mit -g)
-d disassembliert nur Sektionen, die erwartbar Code enthalten; -D nimmt alle. Auf x86-Systemen zeigt objdump standardmäßig die AT&T-Syntax — mit -M intel wechselt man zur Intel-Syntax. -S mischt den Quellcode ein, wenn das Programm mit Debug-Informationen (-g) übersetzt wurde.
Datei-Inspektion
objdump -x ./programm # alle Header und Sektionen
objdump -h ./programm # Section-Tabelle (.text, .data, .rodata)
objdump -s -j .rodata ./programm # Sektionsinhalt als Hexdump
objdump -t ./programm # Symboltabelle
-x liefert den vollständigen Überblick über ELF-Header und Sektionen, -h die Sektionstabelle mit Größen, -s den Inhalt als Hexdump und -j wählt eine Sektion aus. Die Symboltabelle (-t) zeigt Funktions- und Variablennamen.
Praxis-Tipps
- Verwandte Binutils-Werkzeuge:
nm(Symbole auflisten),readelf(ELF-Struktur),addr2line(Adresse zur Quellzeile),objcopy,size,strings. - Ein Crash-Report mit Adresse
0x401234:addr2line -e ./programm 0x401234liefert Datei und Zeile. - objdump ist der direkte Weg, die Maschinensprache hinter einem kompilierten Programm sichtbar zu machen.
Verwandte Grundlagen: Assembly-Befehle, GCC-Befehle, Linker, Valgrind-Befehle, strace-Befehle.