如何在Windows 7 x64上禁用ASLR(地址空间布局随机化)?

Meh*_*dad 25 windows windows-7 aslr windows-7-x64

如何在Windows 7 x64上禁用ASLR,以便我的程序始终在同一地址加载共享CRT?

Mr.*_*. S 24

以前,您必须选择允许链接器使用ASLR.现在,您必须选择退出:

/DYNAMICBASE[:NO]
Run Code Online (Sandbox Code Playgroud)

(Visual Studio 2012:配置属性 - >链接器 - >高级 - >"随机化基址")

您也可以通过编程方式执行此操作.

  • 当您正在调试项目时,这非常方便,并且您希望监视窗口中的地址不会在每次运行时更改. (7认同)
  • 在 Visual Studio 2019 中仍然存在。 (2认同)

小智 18

可从Microsoft下载的增强型缓解体验工具包(EMET)允许在系统或进程的基础上启用/禁用ASLR.

  • 对于任何想知道 EMET 是否会安装在 Win 10 上的人:不,安装失败。 (2认同)
  • EMET 已终止生命周期,但您可以使用 Windows Defender 漏洞保护模块实现相同的目的。Windows 安全 > 应用程序和浏览器控制 > 漏洞利用保护,将系统范围或每个程序的“随机内存分配”设置为“默认关闭”。仅适用于 Windows 10+,所以我不会将其写为答案,因为 OP 要求使用 win7。 (2认同)

Adi*_*yam 12

注册表设置可用于强制启用或禁用所有可执行文件和库的ASLR,可在以下位置找到HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages.

  • 请勿更改全局系统设置以使***程序正常工作 (18认同)
  • @Paul Betts:Kernel32和ntdll肯定是神奇的,但其他DLL也是如此.如果有人在进程A中加载DLL然后有人在进程B中再次打开它们,它们将获得相同的地址(这允许内核让两个进程都由相同的页面支持以节省RAM).因此,如果您安装了Sophos,它将在同一地址的每个进程中拥有它的DLL.与普通DLL的不同之处在于,当每个人都厌倦了它们时,它们都可能被卸载,此时下一个加载将有一个新地址. (3认同)
  • 这对我不起作用(Windows 7 Professional 64位,SP1).但请注意,该注册表项不存在,因此我创建它(作为DWORD = 0)并重新启动.(旁注:作为开发人员,在调试和调查问题时禁用ASLR有时会很有用). (3认同)
  • 同样,如果进程B在进程A加载DLL的方式上有某些东西,那么进程B被迫重新定位它.除了在启动时,从不重新定位的神奇系统DLL也不是这样 (2认同)
  • 这个设置是DWORD吗? (2认同)