为什么"逻辑底部"的偏移?和"物理底部"堆栈随机?

时间:2016-07-03 16:49:03

标签: windows aslr windows-nt

我使用windbg在我的Windows 10机器上运行程序,让它在初始断点处中断。我获取堆栈物理底部的地址(TEB的stackBase),并减去rsp的{​​{1}}值。我只是在同一个程序上做了5次,我得到了5个不同的值:

ntdll!LdrInitializeThunk

如果你对0x600 0x9f0 0xa40 0x5d0 0x570 等做同样的事情,你会得到类似的结果。这表明"逻辑底部"堆栈有点随机化。这是为什么?这是某种" mini-ASLR"堆栈里面?这是在任何地方记录的吗?

1 个答案:

答案 0 :(得分:1)

在Vista中专门搜索ASLR(在Vista中引入ASLR)之后,我发现了赛门铁克的this document。在第5页,它提到了我的问题所在的现象(强调我的):

  

放置堆栈后,初始堆栈指针被随机递减进一步随机化   量。初始偏移量选择为最多半页(2,048字节),但自然受限   对齐的地址[...]

因此,出于安全原因,它似乎是故意完成的(这样就很难找出相对于堆栈基础的固定偏移量的地址)。

我打开这个问题一段时间,希望有人能提供更有见地的答案。如果没有人,我会接受这个答案。