2017-06-16 6 views
0

pourquoi le point d'entrée de elf est 0x8048320. De This question, c'est l'adresse virale utilisée par le noyau du système d'exploitation pour mapper le processus. Mais , l'adresse virale où un processus est mappé (dans les processeurs x86) est 0xc0000000 (inférieur 3 Go pour l'espace utilisateur et supérieur 1 Go pour l'espace noyau). Maintenant, quelle est la théorie derrière cette adresse de point de départ 0x8048320. ne devrait-il pas être 0c0000000h ??Point d'entrée de l'en-tête exécutable elf

Regards,

+0

Point d'entrée de l'en-tête elf: 'readelf -h a.out' – Aimal

+0

Copie possible de [pourquoi l'adresse du point d'entrée dans mon exécutable est 0x8048330 (0x330 étant le décalage de la section .text)] (https://stackoverflow.com/questions/12488010/pourquoi-l'-entrée-de-point-dans-mon-exécutable-est-0x8048330-0x330-being-offset-of) –

Répondre

1

le point d'entrée est pas le début de la mise en correspondance de l'exécutable. C'est l'adresse de la première instruction qui sera exécutée au démarrage du programme. En tant que tel, il est généralement au milieu de la section .text. Si vous utilisez GCC ou un compilateur compatible, ce sera l'adresse d'une fonction _start dans libc. C'est la fonction qui finira par appeler votre main().

De votre exemple, 0x8048320 l'adresse de base sera probablement 0x8000000 et le décalage de _start sera 0x48320.

Dans ma machine, cependant:

$ readelf -h /usr/bin/ls | grep Entry 
Entry point address:    0x404030 

Toutes ces adresses virtuelles sont habituellement au compilateur et/ou éditeur de liens.