Qu'est-ce que le format de fichier ELF ?
Les fichiers avec l'extension .elf stockent des données binaires structurées selon la norme Executable and Linkable Format - le format par défaut des exécutables et des fichiers objets pour Linux, la plupart des systèmes Unix et de nombreuses plateformes embarquées. Le format a été introduit avec Unix System V Release 4 par Unix System Laboratories et ratifié plus tard comme une spécification portable Tool Interface Standard (TIS).
Les fichiers ELF peuvent stocker les types de contenu suivants :
- Fichiers exécutables pour applications et outils, souvent distribués sous forme de fichier .bin
- Fichiers objets compilés, portant généralement l'extension
.o - Bibliothèques partagées - fichiers avec l'extension .so
- Core dumps (instantanés de la mémoire produits après le plantage d'un processus)
Le format est construit autour d'une structure binaire bien définie. Chaque fichier .elf commence par la séquence magique de 4 octets 7F 45 4C 46 (0x7F suivi des lettres ASCII ELF) à l'offset 0, suivie de champs d'en-tête qui identifient l'architecture cible, la taille des mots (32 bits ou 64 bits) et l'ordre des octets (petit-boutiste ou gros-boutiste). Deux tables optionnelles - la table des en-têtes de programme et la table des en-têtes de section - décrivent ensuite comment les segments doivent être chargés au moment de l'exécution et comment les sections sont organisées pour l'édition de liens.
Bien que la norme ELF ait été développée pour les systèmes Unix, elle a été rapidement adoptée par d'autres plateformes, y compris des consoles de jeux telles que la PlayStation 2 et la Wii, Android et de nombreux environnements embarqués. Le type MIME standard est application/x-elf. Le contenu d'un fichier .elf n'est pas lisible par l'homme ; des outils tels que readelf et objdump (faisant tous deux partie de GNU Binutils) peuvent inspecter ses en-têtes et désassembler son code sans l'exécuter.
Sécurité et sûreté
RISQUE : HIGHComme tout exécutable, un ELF peut contenir des logiciels malveillants - les botnets Linux/IoT (par exemple les variantes de Mirai) sont distribués sous forme de binaires ELF, et un ELF s'exécute avec vos privilèges une fois lancé. N'exécutez que des fichiers ELF provenant de sources sûres ; ne faites pas de « chmod +x » pour exécuter des téléchargements aléatoires. Inspectez les ELF inconnus en toute sécurité avec readelf/objdump ou analysez-les sur VirusTotal avant de les lancer. Les fichiers .elf homebrew de console présentent moins de risques (ils s'exécutent dans le bac à sable d'un émulateur) mais procurez-vous-les tout de même auprès de sources homebrew réputées.
Détails du format
en brefProgrammes qui ouvrent les fichiers ELF
Détails techniques
spécifications approfondies| Nombre magique | `7F 45 4C 46` (0x7F suivi de l'ASCII `ELF`) à l'offset d'octet 0, présent dans chaque fichier ELF valide |
| Type MIME | `application/x-elf` |
| Variantes de taille de mot | 32 bits (EI_CLASS = `01`) et 64 bits (EI_CLASS = `02`), encodés à l'offset 4 dans l'en-tête ELF |
| Champ d'ordre des octets | EI_DATA à l'offset 5 : `01` = petit-boutiste, `02` = gros-boutiste ; déterminé par l'architecture matérielle cible |
| Types de fichiers (e_type) | ET_EXEC (exécutable), ET_REL (objet relogeable), ET_DYN (objet partagé ou PIE), ET_CORE (core dump) |
| Architectures cibles | x86, x86-64, ARM, AArch64, MIPS, RISC-V, PowerPC, SPARC et bien d'autres, identifiées par le champ `e_machine` dans l'en-tête ELF |
| Identifiant OS/ABI | L'octet EI_OSABI à l'offset 7 spécifie l'ABI cible : 0 = System V, 3 = Linux, 9 = FreeBSD, 12 = Solaris |
| Disposition de la structure | En-tête ELF → table des en-têtes de programme optionnelle (segments de chargement à l'exécution) → données → table des en-têtes de section optionnelle (sections au moment du lien) |
| Sections nommées clés | `.text` (code), `.data` (données initialisées), `.bss` (données initialisées à zéro), `.rodata` (constantes), `.symtab` / `.dynsym` (symboles), `.rel` / `.rela` (relogements) |
| Liaison dynamique | Les objets partagés sont résolus au moment du chargement par le lieur d'exécution (`ld.so`) ; le chemin de l'interprète requis est stocké dans l'en-tête de programme `PT_INTERP` |
| Informations de débogage | Les données de débogage DWARF sont intégrées dans les sections ELF `.debug_*` et peuvent être supprimées des binaires de production avec la commande `strip` |
| Exécutables indépendants de la position | Les binaires PIE sont de type ET_DYN et supportent l'ASLR ; le noyau Linux randomise leur adresse de chargement de base à chaque lancement |
| Outils d'inspection principaux | `readelf -a` (en-têtes, symboles, sections) et `objdump -d` (désassemblage), tous deux fournis par GNU Binutils |
| Publié | 1989 (Unix System V Release 4); adopted as the TIS/System V ABI standard |
| Standard ouvert | Oui · libre de droits |
| Spécification | refspecs.linuxfoundation.org |
Conversions ELF
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers ELF.