Conception et vie d'un programme : le format ELF

Magazine
Marque
GNU/Linux Magazine
Numéro
129
Mois de parution
juillet 2010


Résumé

Dans le précédent article, nous avions disséqué le processus de compilation d'un programme et étudié les différents états qu'il traverse. Mais le fichier binaire obtenu à la fin de cette chaîne nous semble bien opaque... Pourtant, bien que la distinction soit toujours faite entre fichiers « programmes » exécutables et fichiers « classiques » de données, les premiers ne sont guère différents des seconds en ce qu'ils obéissent à un format bien précis et sont gérés par un programme tiers, le chargeur. Afin de mieux comprendre ce qui fait un programme, nous allons dans le présent article disséquer le format exécutable ELF utilisé par Linux et de nombreux autres systèmes d'exploitation.


Le format ELF (Executable and Linkable Format) est un format binaire spécifié en 1999, qui s'est imposé comme une évidence pour représenter les programmes. Il est utilisé entre autres par Linux, les variantes *BSD, Solaris, IRIX, BeOS, les consoles Sony Playstation, ainsi que les Wii et DS de Nintendo. La raison de cette adoption massive, à laquelle seul Microsoft semble résister, est qu’ELF propose un standard satisfaisant la majorité des besoins, extensible, facilement manipulable et pouvant être utilisé quasiment à l'identique sur de nombreuses architectures.

En raisons de ses nombreuses qualités, les systèmes GNU/Linux utilisent massivement le format ELF. C'est dans ce format que le noyau est construit avant d'être converti en image chargeable, et c'est également sous cette forme que sont stockés tous les exécutables et bibliothèques du système. Il est donc essentiel de le comprendre si l'on veut saisir le fonctionnement interne de ce dernier, et cet article…

La suite est réservée aux abonnés. Il vous reste 97% à découvrir.
  • Accédez à tous les contenus de Connect en illimité
  • Découvrez des listes de lecture et des contenus Premium
  • Consultez les nouveaux articles en avant-première
Envie de lire la suite ? Rejoignez Connect
Je m'abonne maintenant


Article rédigé par

Par le(s) même(s) auteur(s)

Conception et vie d'un programme, partie 4 : exécution et interaction avec le noyau

Magazine
Marque
GNU/Linux Magazine
Numéro
132
Mois de parution
novembre 2010
Résumé
Après avoir étudié les différentes formes et transformations d'un programme depuis le code source jusqu'à l'exécutable chargé, il nous reste à nous intéresser aux mécanismes qui régissent son exécution. Celle-ci doit s'effectuer dans un cadre très strict, contrôlé à outrance par un autre programme qui joue le rôle d'autorité du système : le noyau.

Conception et vie d'un programme, partie 3 : chargement d'un exécutable

Magazine
Marque
GNU/Linux Magazine
Numéro
130
Mois de parution
septembre 2010
Résumé
Au cours des précédents articles, nous nous sommes familiarisés avec les étapes permettant de construire un programme binaire ainsi qu'avec le format ELF dans lequel il est stocké sur le disque. Ce mois-ci, nous allons découvrir comment le système charge ce format en vue de son exécution.

Conception et vie d'un programme : les sous-traitants de GCC

Magazine
Marque
GNU/Linux Magazine
Numéro
128
Mois de parution
juin 2010
Résumé

Compiler, lier, exécuter, … autant de tâches familières pour le programmeur que vous êtes. Mais les détails de ces opérations sont plus confidentielles. Par exemple, connaissez-vous les formes que prend un programme durant sa construction ? Savez-vous comment il est chargé en mémoire et exécuté ? Comment il communique avec le noyau et les bibliothèques du système ? Cette série vous fera découvrir les ficelles de la production et de l'exécution d'un programme sous Linux, un sujet vaste qui nous fera plonger jusque dans les détails du noyau et nous aidera à devenir un meilleur programmeur, conscient de la relation entre son code, le système et le matériel.

OpenSUSE Build Service : créez vos paquets binaires pour (presque) toutes les distributions

Magazine
Marque
GNU/Linux Magazine
Numéro
126
Mois de parution
avril 2010
Résumé
Développer son projet open source est une chose, le faire parvenir jusqu'à ses utilisateurs potentiels en est une autre. L'époque où l'utilisateur moyen de Linux acceptait de compiler le source d'un logiciel est en effet révolue et tout le monde n'a pas l'honneur de voir son projet figurer dans les dépôts officiels des distributions. La solution consiste alors à fournir soi-même les paquets binaires pour le plus de plates-formes possible – une démarche fastidieuse et frustrante, mais l'OpenSUSE Build Service est là pour vous simplifier la vie.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Plus de listes de lecture