---
titre: Harmonisation Technologique Système (Cours 2)
description: Harmonisation Technologique Système (Cours 2), 12/02/2020
tags: HTS, jerome.tchan
author: Jérôme Tchan
---
# Harmonisation Technologique Système (Cours 2)
## Link dynamique
- Fichiers `.so`
- Gain de place et de RAM par rapport au link statique
`man ld.so`
### Exemple
```asm
call puts@plt
```
puts@plt:
```asm
jmp GOT[N]
push $0
jmp plt0
```
plt0:
```asm
push GOT[0]
jmp GOT[1]
```
GOT:
Index | Valeur | Description
----- | -------- | --------------------------
0 | ?? | un des arguments passés au resolver dynamique
1 | xxx | adresse resolver dynamique
N | puts@plt | Si première exécution, jump sur la suite de `puts@plt`, sinon jump sur `puts`
Trois types de program headers:
- `PT_INTERP`: Chemin vers un interpréteur, au chargement du binaire on load l'interpréteur et on saute à l'entry point de l'interpréteur
- `PT_PHDR`: Program header qui décrit où sont les program headers en mémoire
- `PT_DYNAMIC`: Quelles sont les bibliothèques dynamiques, quelles sont les relocations à faire
`auxv`: chargé sur la stack au démarrage du programme et contient:
- adresse vers l'entry point du programme
- program headers du programme
Linker dynamique:
- On récupère l'`l'auxv`
- On récupère l'entry Phdr
- Avec l'entry Phdr on récupère tous les program headers
Structures correspondantes:
- `PT_DYNAMIC`: `Elf64_Dyn`
- `auxv`: `Elf64_auxv_t`
> Voir `elf.h` pour les structures
Load à VirtAddr 0x0 dans un objet dynamique: "charge où tu veux tkt"
=> autres adresses relatives à l'adresse du premier segment
`link_map` dans `link.h`
`r_debug` dans `link.h`