Qu'est-ce que ELF ?
Abréviation de Executable and Linkable Format. Format de fichier utilisé pour les fichiers objets, exécutables et bibliothèques partagées sous Linux et les autres OS de type UNIX, ainsi que dans l'embarqué.
Nom japonais: ELF
« ELF » apparaît dans 3 questions d'entraînement réparties sur 1 thèmes, dont Éditeurs de liens, chargeurs et exécutables.
Domaine: Éditeurs de liens, chargeurs et exécutables
Le contenu d'un fichier ELF
Un fichier ELF (Executable and Linkable Format) commence par un en-tête ELF débutant par les octets magiques 0x7F suivis des lettres E, L et F. L'en-tête indique si le fichier est en 32 ou 64 bits, son ordre des octets, le processeur cible, le type de fichier et l'adresse du point d'entrée où commence l'exécution. Le même format couvre les fichiers objets relocalisables produits par le compilateur, les exécutables, les bibliothèques partagées et les core dumps. Après l'en-tête viennent une table des en-têtes de programme, le contenu lui-même et une table des en-têtes de section décrivant chaque section.
Sections et segments
ELF offre deux vues des mêmes octets. L'éditeur de liens travaille avec des sections à grain fin, comme .text pour le code, .rodata pour les constantes, .data pour les variables initialisées et .bss pour les variables initialisées à zéro, qui n'occupe aucune place dans le fichier et est remplie de zéros au chargement. Le chargeur travaille avec les segments listés dans les en-têtes de programme, qui regroupent les sections par permissions : .text et .rodata vont généralement dans un segment lecture-exécution, .data et .bss dans un segment lecture-écriture. Ce regroupement par permissions simplifie la mise en place de la protection mémoire au niveau des pages.
ELF, PE et Mach-O
Linux, les BSD et de nombreux systèmes embarqués utilisent ELF, Windows utilise le format Portable Executable (PE) pour les fichiers .exe et .dll, et macOS et iOS utilisent Mach-O. Les idées sous-jacentes (régions de code et de données, symboles, relocalisations et informations d'édition de liens dynamique) sont similaires, mais les formats diffèrent, tout comme les interfaces d'appels système et les bibliothèques attendues par les programmes. C'est pourquoi un programme compilé ne s'exécute pas tel quel sur un autre système d'exploitation, même sur le même processeur.
Questions fréquentes
Que signifie ELF ?
ELF signifie Executable and Linkable Format, le format de fichier standard des fichiers objets, des exécutables et des bibliothèques partagées sous Linux et sur de nombreux autres systèmes de type UNIX et embarqués.
Quelle est la différence entre sections et segments dans ELF ?
Les sections sont des unités à grain fin, comme .text et .data, que l'éditeur de liens combine et relocalise. Les segments, décrits par les en-têtes de programme, regroupent les sections de mêmes permissions en unités que le chargeur projette en mémoire.
Un exécutable ELF peut-il fonctionner sous Windows ?
Pas nativement. Windows attend le format PE et ses propres interfaces système ; un programme ELF nécessite donc une couche de compatibilité, une machine virtuelle sous Linux ou une recompilation pour Windows.