Linux ASLR如何准确地随机化堆栈位置



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

我想知道栈基地址随机化的确切代码(在内核或ELF加载程序中)是什么/在哪里。因为我想分配(例如通过mmap)0xC0000000正下方的几页,我只是不确定堆栈是否有可能位于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]

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

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

最新更新