3

我使用的是 32 位 x86 Ubuntu 桌面。我查看了 /proc/[pid]/mmaps,发现堆栈基地址总是在变化(例如,在以下情况下为 0xbfe76000)。所以我猜内核(或 ELF 加载器)必须在每次进程启动时随机化堆栈位置。

我想知道堆栈基地址随机化的确切代码(在内核或 ELF 加载器中)是什么/在哪里。因为我想在 0xC0000000 正下方分配(例如通过 mmap)几页,我只是不确定堆栈是否有可能位于,比如 0xbffff000。谢谢!

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

1 回答 1

0

不是一个直接的答案(并且 ASLR 机制在不同的内核版本中略有发展)。最近的 4.6 内核多次出现aslr字符串。

但是关于您的问题,您可以简单地通过内核查询/proc/self/maps以查找堆栈段,然后使用MAP_FIXED标志mmap来映射这些段之外的内容。

于 2016-05-19T15:57:09.727 回答