Bonjour,
J'ai remarqué que dans les fichiers ELF, le début du fichier est toujours aligné sur le début d'une page. Ce qui veut dire qu'on copie souvent le header ELF (inutile à l'exécution ?) en mémoire.
[exemple]
readelf -l /usr/bin/man nous donne :
Comme on le remarque, il prend à partir de l'Offset (position dans le fichier) 0x0, c'est-à-dire qu'il charge en mémoire le header et tout ce qu'il y a avant le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align ... LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000 0x000000000003a95c 0x000000000003a95c R E 200000 ...
[/exemple]
J'ai fait un « hello world » avec juste un segment (pas de section) qui marche très bien tant que j'aligne le début de fichier avec le début d'une page et ce, même si je commence à mapper après le header. Mais dès qu'on n'est plus aligné, il refuse de charger le programme en mémoire.
Segment unique de mon « hello world » :
— Je me demandais pourquoi il existait cette restriction ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align LOAD 0x0000000000000078 0x0000000000800078 0x0000000000000000 0x0000000000000045 0x0000000000000045 RWE 0
— Je me demandais aussi d'où venait le historique 0x400000.
Merci de vos réponses.
Partager