Chaîne de compilation et anatomie des exécutables

Cette partie de cours est dense et complexe.

On commence par faire quelques rappels / compléments de C. Puis on étudie en détail les différents composants d'une chaîne de (cross) compilation :

  • le préprocesseur
  • le compilateur / l'assembleur
  • l'éditeur de lien

On s'attarde longuement sur la compilation séparée et ses implications dans la génération de code. Des bonnes pratiques de C sont ensuite mises en place.

Dans une deuxième partie, on regarde l'anatomie des exécutables : les différents formats existants, leurs apports et limitations. On étudie en détail le format ELF, dont les sections et les segments. Enfin, on apprend à écrire des scripts de link pour GCC.

Dans le cours sur les ABI, on apprend comment passer des arguments à une fonction C / récupérer la valeur de retour, et comment sont écrits les pologues et épilogues de fonctions. On y apprend aussi les principales règles de l'ABI ARM (APPCS).

À l'issue de ce cours, vous êtes sensé maîtriser la génération d'un exécutable, être en mesure d'en analyser sa structure (objdump, readelf, nm, ...) et savoir générer vos propres exécutables pour des cartes bare-metal (en écrivant vos propres scripts de link et crt0.s).

Vous êtes, de plus, fortement encouragés à lire cette courte page, qui donne de très bonnes pratiques de C ! Vous en trouverez une copie en PDF en bas de cette page-ci.