2016-05-19 2 views
2

J'utilise un bureau Ubuntu 32 bits x86. J'ai regardé le/proc/[pid]/mmaps, et trouvé l'adresse de base de la pile change toujours (par exemple 0xbfe76000 dans le cas suivant). Donc, je suppose que le noyau (ou le chargeur ELF) doit randomiser l'emplacement de la pile chaque fois que le processus démarre. Je me demande quel est le code exact (en noyau ou en chargeur ELF) pour la randomisation de l'adresse de base de la pile. Parce que je veux allouer (par exemple via mmap) quelques pages juste en dessous de 0xC0000000, et je ne suis pas sûr s'il y a une possibilité que la pile puisse être située, disons, 0xbffff000. Je vous remercie!Comment exactement l'ASLR Linux randomise l'emplacement de la pile

... ... 
b7762000-b7763000 rw-p 00020000 fc:00 1188263 /lib/i386-linux-gnu/ld-2.19.so 
bfe55000-bfe76000 rw-p 00000000 00:00 0   [stack] 

Répondre

0

Pas une réponse directe (et les machines ASLR ont légèrement évolué dans différentes versions de noyau). Le noyau 4.6 récent a plusieurs occurrences de la chaîne aslr. Mais en ce qui concerne votre problème, vous pouvez simplement interroger le noyau par l'intermédiaire du /proc/self/maps pour trouver les segments de la pile et ensuite utiliser le drapeau MAP_FIXED pour mmap pour mapper quelque chose en dehors de ces segments.

+0

Merci mais cela ne résout pas totalement mon problème. Parce que je veux allouer de la mémoire au-dessus de toutes les régions de mémoire de l'espace utilisateur. Donc, la meilleure façon est de comprendre comment les pages de la pile sont allouées (je suppose que l'ASLR réserve une plage pour l'adresse de la base de la pile, j'espère que cette plage exclut les plus grandes adresses de l'espace utilisateur) – xiaogw