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 0x401234 liefert 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.