---
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