Éditeurs de liens, chargeurs et exécutables

Sur un microcontrôleur sans OS, quel traitement le code de démarrage effectue-t-il juste après la mise sous tension, avant d'appeler main ?

  1. ARéécrire tout le langage machine de .text de la RAM vers la flash
  2. BLire le contenu de la RAM pour restaurer les valeurs des variables au moment de la dernière coupure
  3. CCopier les valeurs initiales de .data de la flash vers la RAM et remplir de 0 la zone .bss
Afficher la réponse et l'explication

Réponse : C. Copier les valeurs initiales de .data de la flash vers la RAM et remplir de 0 la zone .bss

Le contenu de la RAM étant perdu à la coupure de l'alimentation, les valeurs des variables initialisées sont stockées dans la flash, non modifiable, et le code de démarrage les copie vers l'emplacement des variables en RAM. La zone des variables non initialisées (.bss) est remplie de 0. Dans le script d'édition de liens, on spécifie séparément pour .data « l'adresse de stockage en flash » et « l'adresse d'utilisation en RAM à l'exécution ». Ce n'est qu'après cela que main peut démarrer dans l'état prévu par le langage C.

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

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

  1. Quelle est la différence correcte entre « section » et « segment » dans un fichier ELF ?
  2. Quelle attaque est plus facile à prévenir en n'autorisant jamais simultanément « inscriptible » et « exécutable » sur une page mémoire (W^X, séparation écriture-exécution) ?
  3. Sous Linux, dans quel cas incrémente-t-on généralement le numéro de version du soname, comme le « .1 » de libfoo.so.1 ?
  4. Que permet de savoir la commande ldd appliquée à un exécutable sous Linux ?
  5. Quelle combinaison des formats d'exécutables utilisés par les principaux OS est correcte ?

Comparatifs sur ce thème