Introduction
Le format de fichier ELF, tire son nom de l'anglicisme Executable and Linkable Format, et contient un code exécutable de code compilé destiné aux distributions Linux ou à système d'exploitation Unix. Il peut avoir plusieurs extensions de fichier comme «.axf», «.bin», «.elf», «.o», «.prx», «.so» ou «.exe».
Spécification
| Spécification | Description |
|---|---|
| Type | Exécutable |
| Plateforme | Linux, Solaris, Unix |
Structure d'entête du fichier
Voici la structure d'entête du fichier de format ELF Executable and Linkable Format :
| Déplacement (32 bits) | Déplacement (64 bits) | Description | |
|---|---|---|---|
| 0 à 3 | 0 à 3 | Ce champ permet d'indiquer le numérique magique de la signature, soit 7Fh, alors «ELF» en ASCII. | |
| 4 | 4 | Ce champ permet d'indiquer le format ELF : | |
| Valeur | Description | ||
| 1 | Cette valeur permet d'indiquer un 32 bits | ||
| 2 | Cette valeur permet d'indiquer un 64 bits | ||
| 5 | 5 | Ce champ permet d'indiquer le format des cellules mémoires : | |
| Valeur | Description | ||
| 1 | Cette valeur permet d'indiquer un petit-boutiste (Little Endian), soit LSB | ||
| 2 | Cette valeur permet d'indiquer un gros-boutiste (Big Endian), soit MSB | ||
| 6 | 6 | Ce champ permet d'indiquer la version ELF. | |
| 7 | 7 | Ce champ permet d'indiquer l'OS ABI : | |
| Valeur | Description | ||
| 0 | Cette valeur permet d'indiquer UNIX System V. | ||
| 1 | Cette valeur permet d'indiquer HP-UX. | ||
| 2 | Cette valeur permet d'indiquer NetBSD. | ||
| 3 | Cette valeur permet d'indiquer Linux. | ||
| 6 | Cette valeur permet d'indiquer Sun Solaris. | ||
| 7 | Cette valeur permet d'indiquer IBM AIX. | ||
| 8 | Cette valeur permet d'indiquer SGI Irix. | ||
| 9 | Cette valeur permet d'indiquer FreeBSD. | ||
| 10 | Cette valeur permet d'indiquer Compaq TRU64. | ||
| 11 | Cette valeur permet d'indiquer Novell Modesto. | ||
| 12 | Cette valeur permet d'indiquer OpenBSD. | ||
| 64 | Cette valeur permet d'indiquer ARM EABI. | ||
| 97 | Cette valeur permet d'indiquer ARM. | ||
| 255 | Cette valeur permet d'indiquer un Standalone. | ||
| 8 à 15 | 8 à 15 | Ce champ est inutilisé. | |
| 16 à 17 | 16 à 17 | Ce champ permet d'indiquer le type de fichier : | |
| Valeur | Description | ||
| 1 | Cette valeur permet d'indiquer un fichier repositionable. | ||
| 2 | Cette valeur permet d'indiquer un fichier exécutable. | ||
| 3 | Cette valeur permet d'indiquer un fichier partagé. | ||
| 4 | Cette valeur permet d'indiquer un fichier du coeur du système d'exploitation. | ||
| 18 à 19 | 18 à 19 | Ce champ permet d'indiquer l'ensemble d'instructions utilisé : | |
| Valeur | Description | ||
| 00h | Cette valeur permet d'indiquer une architecture non spécifié. | ||
| 02h | Cette valeur permet d'indiquer une architecture Sparc. | ||
| 03h | Cette valeur permet d'indiquer une architecture 80x86. | ||
| 08h | Cette valeur permet d'indiquer une architecture MIPS. | ||
| 14h | Cette valeur permet d'indiquer une architecture PowerPC. | ||
| 28h | Cette valeur permet d'indiquer une architecture ARM. | ||
| 2Ah | Cette valeur permet d'indiquer une architecture SuperH. | ||
| 32h | Cette valeur permet d'indiquer une architecture IA-64. | ||
| 3Eh | Cette valeur permet d'indiquer une architecture x86-64. | ||
| B7h | Cette valeur permet d'indiquer une architecture AArch64. | ||
| 20 à 23 | 20 à 23 | Ce champ permet d'indiquer la version ELF. | |
| Valeur | Description | ||
| 0 | Cette valeur permet d'indiquer aucune. | ||
| 1 | Cette valeur permet d'indiquer la version actuelle. | ||
| 24 à 27 | 24 à 31 | Ce champ permet d'indiquer la position de l'entrée du programme. | |
| 28 à 31 | 32 à 39 | Ce champ permet d'indiquer la position de la table d'entête du programme. | |
| 32 à 35 | 40 à 47 | Ce champ permet d'indiquer la position de la table d'entête de section. | |
| 36 à 39 | 48 à 51 | Ce champ permet d'indiquer les options spécifique à l'architecture. | |
| 40 à 41 | 52 à 53 | Ce champ permet d'indiquer la taille de l'entête. | |
| 42 à 43 | 54 à 55 | Ce champ permet d'indiquer la taille d'une entrée dans la table d'entête du programme. | |
| 44 à 45 | 56 à 57 | Ce champ permet d'indiquer le nombre d'entrées dans la table d'entête du programme. | |
| 46 à 47 | 58 à 59 | Ce champ permet d'indiquer la taille de l'entrée dans la table d'entête de section. | |
| 48 à 49 | 60 à 61 | Ce champ permet d'indiquer le nombre d'entrées dans la table d'entête de section. | |
| 50 à 51 | 62 à 63 | Ce champ permet d'indiquer l'index de la table d'entête de section avec les noms de section. | |
Code source
Voici des exemples de code source d'utilitaires pour manipuler les .ELF :
| Lien | Langage de programmation | Description | Projet | Syntaxe |
|---|---|---|---|---|
| FROMELF.PAS | Free Pascal, Turbo Pascal | Cette commande permet d'analyser un ELF. | Corail | FROMELF |
Dernière mise à jour : Dimanche, le 14 février 2016