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