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 :

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

[/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 » :
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 pourquoi il existait cette restriction ;
— Je me demandais aussi d'où venait le historique 0x400000.

Merci de vos réponses.