--- title: HTS description: harmonie technologie system authors: jeremy.delbarre tags: HTS, jeremy.delbarre --- ## compilation du c ### les étapes de la compilation étape de compilation: #### étape 1: prépocessing - gère les macros - .c -> .i - programme utilisé cpp #### étape 2: compilateur - compile le programme - .i -> .s - programme utilisé cc1 #### étape 3: assemblage - assemble le programme en assembleur - .s -> .o - programme utilisé as #### étape 4: linkage - link les import manquant - .o -> .exe - programme utilisé ld - c'est içi que les relocations sont éffectué - construction des segments qui permettent de charger le programme en mémoire - dans quel cas je connais pas les l'emplacement des relocs - dans le cas des lib externes - les variables globale - les sections de elf - le link remet les sections bout a bout - les segment contiennent aussi les permissions des segment - .data read/write - .text read/exec - .bss ### les section d'un binaire - .text contient le code - .data contient les data globales - pour passer d'une section a une autre une relocs doit être effectuer - .rodata qui contient les string litéral et les vtable (en cpp) - les vtables permettent de savoir quelle fonction appelé lors de l'héritage - elle contiennent les pointeurs sur fonction pour chaque class - read only - .bss contient la data globale non initialisé - contient la taille de cette data - évite de l'utilisation de mémoire inutile - sur le disque le programme prend la taille des sections .text et .data - dans la ram cela prend la taille de toutes les sections - les table de string pour - le nom des sections - la table des symbole (symtab) - strtab ### ELF - .eh_frame appelle les destructeurs lorsq'une exception est lancé (expection handler) - contient les références vers toutes les fonctions - deux strtab une qui correspond a la symtab et une pour stocker les noms des sections - link indique si une section est relier a celle la - permet de mettre des liens entre deux section lorsqu'il y a des reloc - info sa dépend #### header ELF - utilisé readelf - information de validation peu intérressantes sauf elf_64 ou elf_32 - type de fichier elf - ET_EXEC: binary program - ET_REL: relocation info - ET_CORE: core dump des sigabort - ET_DYN: info sur le link avec les autre - offset du debut et taille des headers - offset du début et taille des sections #### relocs - offset indiquant le début - info deux champs - numéro de la section - type de reloc - relocs différentes en fonction de l'architecture #### les segments - utilisé par le linker statique et le debuger - segment load - defini l'offset, la taille et donne ensuite l'addresse mémoire a laquelle il faut la charger - flag donne les permission sur ce segment ### Link dynamique la pile contiens - argc et argv - les données d'environnement ENVP - AUXV addresse du binaire