Qu'est-ce que ELF Magic?

26

J'ai déjà vu une discussion sur la magie ELF, plus récemment les commentaires dans cette question d'échange de pile de sécurité . Je l'ai vu mentionné auparavant, et je l'ai vu dans mes propres journaux de démarrage .. Mais je ne suis pas sûr de ce que c'est.

La page de manuel sur elf est un peu au-dessus de ma tête, car je ne fais pas de langages C ou de niveau inférieur.

En tant que personne qui utilise Linux comme système d'exploitation quotidien, qu'est-ce que ELF?

Mitch
la source
3
Concernant la magie, voir aussi Linux file command classifying files
Gilles 'SO- stop being evil'
13
Le titre est mieux adapté pour l'échange de pile rpg.
Cthulhu

Réponses:

37

Depuis la page de manuel à laquelle vous faites référence:

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

ELF définit le format binaire des fichiers exécutables utilisés par Linux. Lorsque vous invoquez un exécutable, le système d'exploitation doit savoir comment charger correctement l'exécutable en mémoire, comment résoudre les dépendances de bibliothèque dynamique, puis où accéder à l'exécutable chargé pour commencer à l'exécuter. Le format ELF fournit ces informations. La magie ELF est utilisée pour identifier les fichiers ELF et n'est que les tout premiers octets d'un fichier:

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

ou

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

Ces 16 octets identifient sans ambiguïté un fichier comme un exécutable ELF. De nombreux formats de fichiers ont des octets "magiques" qui accomplissent la même tâche - identifier un type de fichier.

casey
la source
8
La magie réelle n'est que les quatre premiers octets. Les champs suivants décrivent l'endianité, l'architecture du processeur et diverses autres choses.
Simon Richter
@SimonRichter qui se résume à la sémantique. Les 4 premiers octets sont magiques pour l'identification générique de nombreux types de fichiers, mais le demandeur a spécifié "ELF magic", qui readelfreconnaît même qu'il fait 16 octets.
casey
2
Si vous voulez devenir vraiment technique, les 16 premiers octets sont l '"identification" ( e_ident), dont les 4 premiers octets sont le nombre magique (à EI_MAG0travers EI_MAG3)
Michael Mrozek
1
@slebetman Mon utilisation de la "magie" provient de la spécification ELF: "Les 4 premiers octets d'un fichier contiennent un 'nombre magique', identifiant le fichier comme un fichier objet ELF"
Michael Mrozek
2
"Sans ambiguïté" exagère un tout petit peu. Sauf si vous savez d'où vient le fichier, tout n'est qu'une supposition. Un fichier dans /bin, bien sûr, c'est presque certainement un binaire ELF. Certains fichiers aléatoires que vous avez téléchargés, cependant ... rien ne le dit.
cHao
11

Les «nombres magiques» sont le nom donné aux séquences constantes d'octets (généralement) au début des fichiers, utilisés pour marquer ces fichiers comme étant d'un format de fichier particulier. Ils servent un objectif similaire aux extensions de fichiers.

Voir l' entrée du fichier jargon pour plus d'informations.

Par exemple, les images PNG commencent toujours par les mêmes huit octets: 137 80 78 71 13 10 26 10

Par conséquent, les nombres magiques ELF sont les octets au début des fichiers elf qui les identifient comme tels.

legolasss
la source