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 des listes de lecture et des contenus 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, 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 : 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.

Les derniers articles Premiums

Les derniers articles Premium

La place de l’Intelligence Artificielle dans les entreprises

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

L’intelligence artificielle est en train de redéfinir le paysage professionnel. De l’automatisation des tâches répétitives à la cybersécurité, en passant par l’analyse des données, l’IA s’immisce dans tous les aspects de l’entreprise moderne. Toutefois, cette révolution technologique soulève des questions éthiques et sociétales, notamment sur l’avenir des emplois. Cet article se penche sur l’évolution de l’IA, ses applications variées, et les enjeux qu’elle engendre dans le monde du travail.

Petit guide d’outils open source pour le télétravail

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

Ah le Covid ! Si en cette période de nombreux cas resurgissent, ce n’est rien comparé aux vagues que nous avons connues en 2020 et 2021. Ce fléau a contraint une large partie de la population à faire ce que tout le monde connaît sous le nom de télétravail. Nous avons dû changer nos habitudes et avons dû apprendre à utiliser de nombreux outils collaboratifs, de visioconférence, etc., dont tout le monde n’était pas habitué. Dans cet article, nous passons en revue quelques outils open source utiles pour le travail à la maison. En effet, pour les adeptes du costume en haut et du pyjama en bas, la communauté open source s’est démenée pour proposer des alternatives aux outils propriétaires et payants.

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

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

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

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

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

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.
Voir les 65 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous