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.

Comme pour les précédents articles, le système étalon sur lequel les exemples ont été effectués est une Ubuntu 9.10 32 bits. Il est recommandé de l'utiliser, au besoin à l'aide d'un émulateur comme QEmu ou VirtualBox, afin de retrouver les mêmes résultats.

Le fil rouge de cet article sera un simple Hello World dont nous ferons l'offense de rappeler le code source :

#include <stdio.h>

int main(int argc, char *argv[]) {

  puts("Hello, ELF!");

return 0;

}

Ce programme sera compilé vers un exécutable dynamique de la façon suivante :

$ gcc test.c -o test

Comme le premier article nous l'a expliqué, cette compilation ajoutera automatiquement une dépendance à la bibliothèque système C qui contient la fonction puts. Cette bibliothèque devra donc être disponible sur le système et chargée en même temps que le programme afin que celui-ci puisse s'exécuter.

Nous produirons également une version statique de ce programme :

$ gcc test.c -static -o test_static

Constatons au passage la...

Cet article est réservé aux abonnés. Il vous reste 96% à découvrir.
S'abonner à Connect
  • Accédez à tous les contenus de Connect en illimité
  • Découvrez chaque semaine un nouvel article premium
  • Consultez les nouveaux articles en avant-première
Je m'abonne


Article rédigé par

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

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.

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 derniers articles Premiums

Les derniers articles Premium

Du graphisme dans un terminal ? Oui, avec sixel

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

On le voit de plus en plus, les outils en ligne de commandes s'étoffent peu à peu d'éléments graphiques sous la forme d'émojis UTF8. Plus qu'une simple décoration, cette pointe de « graphisme » dans un monde de texte apporte réellement un plus en termes d'expérience utilisateur et véhicule, de façon condensée, des informations utiles. Pour autant, cette façon de sortir du cadre purement textuel d'un terminal n'est en rien une nouveauté. Pour preuve, fin des années 80 DEC introduisait le VT340 supportant des graphismes en couleurs, et cette compatibilité existe toujours...

Game & Watch : utilisons judicieusement la mémoire

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Au terme de l'article précédent [1] concernant la transformation de la console Nintendo Game & Watch en plateforme de développement, nous nous sommes heurtés à un problème : les 128 Ko de flash intégrés au microcontrôleur STM32 sont une ressource précieuse, car en quantité réduite. Mais heureusement pour nous, le STM32H7B0 dispose d'une mémoire vive de taille conséquente (~ 1,2 Mo) et se trouve être connecté à une flash externe QSPI offrant autant d'espace. Pour pouvoir développer des codes plus étoffés, nous devons apprendre à utiliser ces deux ressources.

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous