Windows 7 具有堆随机化和堆栈随机化功能。我怎么能管理它?它们如何影响我的应用程序的性能?在哪里可以找到有关其工作原理的更多信息?
我正在使用 Visual Studio 2008 开发 C++ 程序。我找不到该功能的任何编译器选项。
Windows 7 具有堆随机化和堆栈随机化功能。我怎么能管理它?它们如何影响我的应用程序的性能?在哪里可以找到有关其工作原理的更多信息?
我正在使用 Visual Studio 2008 开发 C++ 程序。我找不到该功能的任何编译器选项。
好的,堆随机化和堆栈随机化是 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。此外,如果攻击正在对整个可能的堆地址范围进行暴力扫描,则手动释放堆基地址之前的范围以尝试强制访问冲突。
当然它只是一个操作系统功能?它不应该打扰你。操作系统将移动您的应用程序,只要您不假设您的应用程序已加载到特定的内存地址(无论如何您都不应该假设),您就不会遇到任何问题。