我用windbg在我的Windows 10机器上运行一个程序,让它在初始断点处中断。我取堆栈物理底部的地址(TEB 的 stackBase),然后减去rsp
. ntdll!LdrInitializeThunk
我只是在同一个程序上做了 5 次,得到了 5 个不同的值:
0x600
0x9f0
0xa40
0x5d0
0x570
如果你对ntdll!RtlUserThreadStart
等做同样的事情,你会得到类似的结果。这表明堆栈的“逻辑底部”有些随机化。这是为什么?这是堆栈内部的某种“迷你ASLR”吗?这在任何地方都有记录吗?