Executable and Linking Format

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Das Executable and Linkable Format (kurz: ELF) beschreibt das Standard-Binärformat ausführbarer Programme unter vielen UNIX-ähnlichen Betriebssystemen wie beispielsweise Linux oder FreeBSD.

Geschichte[Bearbeiten]

Das Format wurde ursprünglich von den Unix System Laboratories entwickelt und wurde 1993 vom Tool Interface Standard Committee im Rahmen des Tool Interface Standard (TIS) als Standard für ausführbare Programme akzeptiert. 1995 wurde das Format in Linux eingeführt, da es schneller und flexibler als die früher verwendeten Formate a.out und COFF war.

Technische Eigenschaften[Bearbeiten]

Besonderheiten dieses Formats sind unter anderem das dynamische Linken und 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. Es bietet ferner die Möglichkeit, Objektdateien zu identifizieren, zu parsen und sie gleichzeitig zu interpretieren, also auszuführen.

Das ELF-Format bietet nicht die Möglichkeit von Fat Binaries, d. h. Code für mehr als eine Zielplattform (etwa x86 und ARM) in derselben Binärdatei zu speichern. Eine ELF-Erweiterung namens FatELF, die diese Fähigkeit nachrüstet, hat sich bis heute nicht durchsetzen können.[1][2]

Die Laufzeitbibliothek libelf ist ein nützlicher Helfer, um ELF-Dateien zu handhaben, beispielsweise Informationen auszulesen.

Aufbau[Bearbeiten]

Eine ELF-Datei kann aus bis zu fünf Teilen bestehen:

  • Kopfinformationen (ELF header)
  • Programmkopf-Tabelle (program header table)
  • Sektionskopf-Tabelle (section header table)
  • die Sektionen (ELF sections)
  • die Segmente (ELF segment)

Dateitypen[Bearbeiten]

Die drei Hauptarten von ELF-Dateien sind

Alle Dateitypen beinhalten den Code, die Daten und Informationen über das Programm, das Betriebssystem und über den Linker, der zur Laufzeit benötigt wird.

executable[Bearbeiten]

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.

relocatable[Bearbeiten]

Dieser Dateityp beschreibt, wie er mit anderen Objektdateien verlinkt werden muss, damit daraus eine ausführbare Datei oder eine dynamische Bibliothek produziert werden kann.

shared object[Bearbeiten]

Dieser Dateityp beinhaltet Informationen, die für das statische und dynamische Linken von Bedeutung sind.

FatELF: Universal Binaries for Linux[Bearbeiten]

Logo der Linux-Fat-Binary-Implementier­ung FatELF

FatELF ist eine ELF-Binärformat-Erweiterung, entwickelt von Ryan C. Gordon, welche Fat binary-Fähigkeiten hinzufügt.[3] Neben verschiedenen CPU-Architekturen mit variierenden Datenwortgrößen (beispielsweise 32-Bit oder 64-Bit Systeme) oder Byte-order können auch Software-Plattformvariationen unterstützen werden, wie verschiedene OS-ABIs (oder Versionen). Eine Beispielimplementierung für Ubuntu 9.04 ist verfügbar. Eine Integration in den Linuxkernel steht noch aus.[1][2][4]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. a b Thom Holwerda: Ryan Gordon Halts FatELF Project. osnews.com. 3. November 2009. Abgerufen am 5. Juli 2010.
  2. a b Joe Brockmeier: SELF: Anatomy of an (alleged) failure. Linux Weekly News. 23. Juni 2010. Abgerufen am 6. Februar 2011.
  3. Ryan Gordon: fatelf-specification v1. icculus.org. Abgerufen am 25. Juli 2010.
  4. Ryan Gordon: FatELF: Turns out I liked the uncertainty better.. icculus.org. Abgerufen am 13. Juli 2010.