Executable and Linkable Format
ELF (Executable and Linkable Format, format exĂ©cutable et liable ; anciennement Executable and Linking Format) est un format de fichier binaire utilisĂ© pour l'enregistrement de code compilĂ© (objets, exĂ©cutables, bibliothĂšques de fonctions). Il a Ă©tĂ© dĂ©veloppĂ© par lâUSL (Unix System Laboratories) pour remplacer les anciens formats a.out et COFF qui avaient atteint leurs limites. Aujourd'hui, ce format est utilisĂ© dans la plupart des systĂšmes d'exploitation de type Unix (GNU/Linux, Solaris, IRIX, System V, BSD), Ă l'exception de Mac OS X.
Executable and Linkable Format
Extensions |
-, .axf , .bin , .elf , .o , .prx , .so , .exe |
---|---|
PUID | |
Signature | 7F 45 4C 46 (hexa) |
Développé par |
Unix System Laboratories (en) |
Type de format |
Format de fichier exécutable |
Spécification |
Le format de fichier ELF
Chaque fichier ELF est constituĂ© d'un en-tĂȘte fixe, puis de segments et de sections. Les segments contiennent les informations nĂ©cessaires Ă l'exĂ©cution du programme contenu dans le fichier, alors que les sections contiennent les informations pour la rĂ©solution des liens entre fonctions et le replacement des donnĂ©es. Sur la plupart des systĂšmes Unix, la commande man elf
donnera de plus amples informations[1].
EntĂȘte d'un fichier ELF
L'entĂȘte d'un fichier ELF adopte le format suivant[2]:
Nom du champ | Valeur | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Identification |
| ||||||||||||||||||||||||
Type de fichier (16 Bits) |
| ||||||||||||||||||||||||
Machine cible (16 Bits) |
| ||||||||||||||||||||||||
Version (32 bits) |
| ||||||||||||||||||||||||
Point d'entrée (32 Bits ou 64 Bits) | (0) si aucun point d'entrée | ||||||||||||||||||||||||
Offset (en octets) de la table contenant l'entĂȘte de programme (32 Bits ou 64 Bits) | |||||||||||||||||||||||||
Offset (en octets) de la table des entĂȘtes de sections (32 Bits ou 64 Bits) | |||||||||||||||||||||||||
Drapeaux spécifique au processeur (32 Bits) | |||||||||||||||||||||||||
Taille (en octets) de l'entĂȘte ELF (16 Bits) | |||||||||||||||||||||||||
Taille (en octets) d'une entrĂ©e dans la table contenant l'entĂȘte de programme (16 Bits) | |||||||||||||||||||||||||
Nombre d'entrĂ©es dans la table contenant l'entĂȘte de programme (16 Bits) | |||||||||||||||||||||||||
Taille (en octets) d'une entrĂ©e dans la table des entĂȘtes de sections (16 Bits) | |||||||||||||||||||||||||
Nombre d'entrĂ©es dans la table des entĂȘtes de sections (16 Bits) | |||||||||||||||||||||||||
Indice dans la table des entĂȘtes de sections de l'entrĂ©e associĂ©e Ă la table contenant les noms des sections (16 Bits) | (0) si non dĂ©fini |
Comparaison avec d'autres systĂšmes d'exploitation
Les structures Ă©quivalentes sont :
- sous Windows : format PE (Portable Executable) ;
- sous Mac OS, avant la version X : PEF (Preferred Executable Format), voir (en) Preferred Executable Format ;
- sous Mac OS X : Mach-O[3].