Éditeurs de liens, chargeurs et exécutables

Quelle affirmation concernant l'adresse où l'OS commence l'exécution d'un programme C (point d'entrée) est correcte ?

  1. AC'est toujours le début de la fonction main
  2. BC'est par convention le premier octet de l'exécutable
  3. CCe n'est généralement pas main mais un code de démarrage comme _start, qui effectue l'initialisation puis appelle main
Afficher la réponse et l'explication

Réponse : C. Ce n'est généralement pas main mais un code de démarrage comme _start, qui effectue l'initialisation puis appelle main

L'éditeur de liens intègre au programme les objets de démarrage fournis par le runtime C (crt1.o, etc.) et prend comme point d'entrée le _start qu'ils contiennent. _start récupère les arguments de ligne de commande sur la pile, initialise la bibliothèque standard et les objets globaux, puis appelle main. Au retour de main, il appelle exit avec la valeur de retour pour effectuer le traitement de fin.

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

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

  1. Lorsque la fonction main d'un programme C se termine par « return 3; », que devient généralement cette valeur 3 ?
  2. Que se passe-t-il lorsqu'on applique la commande strip à un exécutable ?
  3. Quel est le traitement correct d'un symbole faible (weak symbol) par l'éditeur de liens ?
  4. 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 ?
  5. Quel est l'usage le plus approprié de la fonction dlopen de Linux (équivalent de LoadLibrary sous Windows) ?

Comparatifs sur ce thème