readelf aus den GNU Binutils zeigt die Struktur von ELF-Dateien an — dem Standard-Binärformat für ausführbare Programme und Bibliotheken unter Linux. Anders als objdump-Befehle disassembliert es nicht, sondern präsentiert Header, Sektionen, Symbole und Abhängigkeiten als Klartext.

Die wichtigsten Optionen

readelf -h programm     # ELF-Header: Klasse, Endianness, Entry Point
readelf -S programm     # Sektionen: .text, .data, .rodata, .debug_*
readelf -s programm     # Symboltabelle
readelf -r programm     # Relokationen
readelf -d programm     # dynamische Sektion: DT_NEEDED-Abhängigkeiten
readelf -l programm     # Program-Header (Segmente)
readelf -a programm     # alles auf einmal

Praxis-Beispiele

  • readelf -h /bin/ls zeigt den Dateityp (meist DYN = PIE), die Ziel-Architektur (zum Beispiel X86-64) und die Einstiegsadresse
  • readelf -d programm listet die benötigten Shared Libraries unter NEEDED — nützlich, um fehlende Abhängigkeiten zu erkennen
  • readelf -s programm | grep FUNC findet definierte Funktionen; fehlt die Symboltabelle, ist die Datei gestrippt
  • Für Malware-Analyse und Reverse Engineering: readelf -a datei liefert den kompletten Überblick über das ELF-Format
  • readelf -x .rodata programm gibt eine Sektion als Hexdump aus, readelf -p .rodata als Strings

Einordnung

Die Symbole, Sektionen und Relokationen, die readelf anzeigt, erzeugt der Compiler; der Linker setzt sie zu einem lauffähigen Programm zusammen. Die Symboltabelle ist dabei der Schlüssel zwischen Maschinencode und Quelltext.

Verwandte Grundlagen: perf-Befehle (Performance-Profile), ltrace-Befehle (Bibliotheksaufrufe).