Executable and Linking Format
ELF ist die Abkürzung für "Executable and Linking Format" und beschreibt das Binärformat von ausführbaren Programmen unter vielen auf UNIX basierenden Betriebssystem wie beispielsweise Linux.
Herkunft und Besonderheiten des Formats
Das Format wurde ursprünglich von den "Unix System Laboratories" entwickelt und wurde schnell als Standard für ausführbare programme akzeptiert, da es schneller und flexibler war, als die Formate "a.out" oder "COFF".
Besonderheiten dieses Formats sind unter anderem das dynamische Linken, das dynamische Laden, die problemlose Kontrolle von bereits laufenden Programmen und die einfache Möglichkeit dynamische Bibliotheken zu erzeugen. Dabei ist die Repräsentation der Kontrolldaten im Gegensatz zu anderen proprietären Formaten in einer ELF-Datei stets plattformunabhängig. Das Format bietet ferner die Möglichkeit, Objektdateien zu identifizieren, zu parsen und sie gleichzeitig zu interpretieren (auszuführen).
Zum Ausführen einer ELF-Datei ist die libelf im System erforderlich.
Dateitypen
Die drei Hauptarten von Dateien sind
- executable
- relocatable
- shared object
Alle Dateitypen beinhalten den Code, die Daten und Informationen über das Programm, das Betriebsystem und über den Linker, der zur Laufzeit benötigt wird.
Typ: executable
Dieser Dateityp liefert die nötigen Informationen für das Betriebssystem, um einen neuen Prozess zu erzeugen, der auf den Code und die Daten innerhalb der Datei zugreifen kann.
Typ: relocatable
Dieser Dateityp beschreibt, wie er mit anderen Objektdateien verlinkt werden muss, damit daraus eine ausführbare Datei oder eine dynamische Bibliothek produziert werden kann.
Typ: shared object
Dieser Dateityp beinhaltet Informationen, die für das statische und dynamische Linken von Bedeutung sind.
Aufbau der Datei
Eine ELF-Datei kann aus bis zu fünf Teilen bestehen:
- ELF-Kopfinformationen (ELF header)
- Programmkopf-Tabelle (program header table)
- Sektionskopf-Tabelle (section header table)
- die Sektionen (ELF sections)
- die Segmente (ELF segment)