Éditeurs de liens, chargeurs et exécutables

Que fait le chargeur de l'OS au démarrage d'un programme (execve sous Linux notamment) ?

  1. AIl lit le code source, le compile sur place puis l'exécute
  2. BIl dispose chaque partie en mémoire selon les en-têtes de programme de l'exécutable, prépare les arguments sur la pile, etc., et lance l'exécution à l'adresse du point d'entrée
  3. CIl affiche à l'écran tous les noms de symboles de l'exécutable avant de l'exécuter
Afficher la réponse et l'explication

Réponse : B. Il dispose chaque partie en mémoire selon les en-têtes de programme de l'exécutable, prépare les arguments sur la pile, etc., et lance l'exécution à l'adresse du point d'entrée

Le chargeur lit l'en-tête de l'exécutable et projette dans l'espace d'adressage virtuel chaque partie (segment) décrite dans les en-têtes de programme, avec ses droits de lecture, écriture et exécution. Il prépare la zone de zéros du BSS et la pile, et empile les arguments de ligne de commande et les variables d'environnement. Pour un programme à liens dynamiques, il lance l'éditeur de liens dynamique ; sinon, il commence l'exécution à l'adresse du point d'entrée de l'exécutable.

S'entraîner sur ce thème Retour au thème

Autres questions sur Éditeurs de liens, chargeurs et exécutables

  1. Quelle affirmation concernant l'adresse où l'OS commence l'exécution d'un programme C (point d'entrée) est correcte ?
  2. Lorsque la fonction main d'un programme C se termine par « return 3; », que devient généralement cette valeur 3 ?
  3. Que se passe-t-il lorsqu'on applique la commande strip à un exécutable ?
  4. Quel est le traitement correct d'un symbole faible (weak symbol) par l'éditeur de liens ?
  5. Quel est le principal objectif de la décoration de noms (mangling), par laquelle le compilateur C++ ajoute au nom d'une fonction des informations comme le type de ses arguments pour former le nom de symbole ?

Comparatifs sur ce thème