---
# System prepended metadata

title: HTS
tags: [HTS, ' jeremy.delbarre']

---

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