Was ist ELF Magic?

26

Ich habe bereits eine Diskussion über ELF-Magie gesehen, zuletzt die Kommentare in dieser Frage zum Austausch von Sicherheitsstapeln . Ich habe es schon einmal gesehen und ich habe es in meinen eigenen Boot-Logs gesehen. Aber ich bin mir nicht sicher, was es ist.

Die Manpage zu Elf ist etwas überfordert, da ich keine C- oder niedrigersprachigen Versionen beherrsche.

Was ist ELF als jemand, der Linux als tägliches Betriebssystem verwendet?

Mitch
quelle
3
Bezüglich Magie siehe auch Linux-
Gilles 'SO - hör auf, böse zu sein',
13
Der Titel ist besser für den Austausch von RPG-Stapeln geeignet.
Cthulhu

Antworten:

37

Direkt von der Manpage, auf die Sie verweisen:

elf - format of Executable and Linking Format (ELF) files

ELF definiert das Binärformat der von Linux verwendeten ausführbaren Dateien. Wenn Sie eine ausführbare Datei aufrufen, muss das Betriebssystem wissen, wie die ausführbare Datei ordnungsgemäß in den Speicher geladen wird, wie dynamische Bibliotheksabhängigkeiten aufgelöst werden und wo Sie in die geladene ausführbare Datei springen können, um mit der Ausführung zu beginnen. Das ELF-Format bietet diese Informationen. ELF-Magie wird zum Identifizieren von ELF-Dateien verwendet und ist nur das allererste Byte einer Datei:

% od -c -N 16 /bin/ls
0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020

oder

% readelf -h /bin/ls | grep Magic
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 

Diese 16 Bytes identifizieren eine Datei eindeutig als ausführbare ELF-Datei. Viele Dateiformate haben "magische" Bytes, die dieselbe Aufgabe erfüllen - die Identifizierung eines Dateityps.

casey
quelle
8
Die eigentliche Magie sind nur die ersten vier Bytes. In den folgenden Feldern werden Endianness, CPU-Architektur und verschiedene andere Dinge beschrieben.
Simon Richter
@SimonRichter das läuft auf Semantik hinaus. Die ersten 4 Bytes sind magisch für die generische Identifizierung vieler Dateitypen, aber der Fragesteller hat "ELF magic" angegeben, was sogar readelf16 Bytes bestätigt.
Casey
2
Wenn Sie wirklich technisch werden möchten, sind die ersten 16 Bytes die "Identifizierung" ( e_ident), von denen die ersten 4 Bytes die magische Zahl ( EI_MAG0durch EI_MAG3) sind
Michael Mrozek
1
@slebetman Meine Verwendung von "magic" ergibt sich aus der ELF-Spezifikation: "Die ersten 4 Bytes einer Datei enthalten eine" magic number ", die die Datei als ELF-Objektdatei identifiziert."
Michael Mrozek
2
"Eindeutig" ist ein kleines bisschen übertrieben. Sofern Sie nicht wissen, woher die Datei stammt, ist alles nur eine Vermutung. Bei einer Datei /binhandelt es sich mit ziemlicher Sicherheit um eine ELF-Binärdatei. Einige zufällige Dateien, die Sie heruntergeladen haben, sind jedoch nicht aussagekräftig.
CHAO
11

"Magische Zahlen" ist der Name, der (normalerweise) konstanten Folgen von Bytes am Anfang von Dateien gegeben wird, um diese Dateien als Dateien eines bestimmten Dateiformats zu kennzeichnen. Sie dienen einem ähnlichen Zweck wie Dateierweiterungen.

Weitere Informationen finden Sie im Jargon-Dateieintrag .

PNG-Bilder beginnen beispielsweise immer mit denselben acht Bytes: 137 80 78 71 13 10 26 10

Daher sind magische ELF-Zahlen die Bytes am Anfang von Elf-Dateien, die sie als solche identifizieren.

Legolasse
quelle