Executable and Linkable Format

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Executable and Linkable Format
Extension aucune, .o, .so, .exe, .elf
Développé par Unix System Laboratories
Type de format Format de fichier exécutable
Spécification Format ouvert

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.

Le format de fichier ELF[modifier | modifier le code]

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[modifier | modifier le code]

L'entête d'un fichier ELF adopte le format suivant[2]:

Nom du champ Valeur
Identification
Indice Valeur
0 - Nombre Magique 0x7f
1 - Nombre Magique 'E'
2 - Nombre Magique 'L'
3 - Nombre Magique 'F'
4 - 64Bits ou 32Bits
  • (0) Aucun
  • (1) 32Bits
  • (2) 64Bits
5 - Endianness
  • (0) Aucun
  • (1) LSB
  • (2) MSB
6 - Version du format de l'entête
7 - ABI
8-13 Bourage 0
14 Taille du champ "Identification"
Type de fichier (8 Bits)
  • (0) Aucun
  • (1) Repositionable
  • (2) Executable
  • (3) Objet partagé
  • (4) Fichier Core
Machine cible (8 Bits)
Version
  • (0) Aucune
  • (1) Version actuelle
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[modifier | modifier le code]

Les structures équivalentes sont :

Notes et références[modifier | modifier le code]

  1. Page de manuel « elf ».
  2. Header ELF dans la documentation d'ORACLE.
  3. Mach-O, sur le site pour développeurs d'Apple.