Windows中的堆随机化

Windows 7具有堆随机化堆栈随机化function。 我怎么能pipe理它? 它们如何影响我的应用程序的性能? 在哪里我可以find更多关于它是如何工作的信息?

我正在使用Visual Studio 2008来开发C ++程序。 我无法find该function的任何编译器的选项。

好的,堆随机化和堆栈随机化是Windows功能,但必须显式启用每个进程在链接时。 Mark Russinovich描述了他的第5部Windows Internals书是如何工作的。

堆栈随机化包括首先选择由64 KB或256 KB分隔的32个可能堆栈位置之一。 通过找到第一个合适的空闲存储区域,然后选择第x个可用区域来选择这个基地址,其中再次根据当前处理器的TSC移位并屏蔽成一个5位值来产生x

最后,ASLR在用户模式下创建时随机化初始进程堆(以及后续堆)的位置。 RtlCreateHeap函数使用另一个伪随机的TSC派生值来确定堆的基地址。 此值为5位,这次乘以64 KB,生成最终的基地址,从0开始,为初始堆提供0x00000000到0x001F0000的可能范围。 此外,堆基地址之前的范围被手动释放,试图强制访问冲突,如果攻击正在对整个可能的堆地址范围进行强力扫描。

当然,它只是一个操作系统功能? 它丝毫不应该打扰你。 操作系统将移动你的应用程序,只要你不认为你的applciation被加载到一个特定的内存地址(你真的不应该承担),你不会有任何问题。