在Windows中堆随机化

时间:2009-08-05 09:18:57

标签: c++ windows visual-c++ heap-randomization aslr

Windows 7具有堆随机化堆栈随机化功能。我怎么能管理它?它们如何影响我的应用程序的性能?在哪里可以找到有关其工作原理的更多信息?

我正在使用Visual Studio 2008开发C ++程序。我找不到任何编译器的功能选项。

2 个答案:

答案 0 :(得分:2)

好的,堆随机化和堆栈随机化是Windows功能,但必须在链接时为每个进程明确启用。 Mark Russinovich在他的5-th Windows Internals书中描述了它是如何起作用的。

  

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

     

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

答案 1 :(得分:0)

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