ASLR 和 mshta.exe 的错误 "The system cannot execute the specified program" 之间有什么关系?

What is the relation between ASLR and the mshta.exe's error "The system cannot execute the specified program"?

我遇到了问题 运行 mshta.exe。正如您在下图中看到的,我得到了错误:The system cannot execute the specified program.

我创建了一个test.hta文件,但也无法执行。我已经尝试了这些解决方案,其中 none 有效:

  1. 我已禁用 App Locker
  2. 我已禁用防病毒软件
  3. 我关闭了 windows 防火墙。

然而,当我启用 ASLR 时,它起作用了! 我已将注册表值 MoveImages 编辑为 1。它位于键 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management 下。我之前禁用了 ASLR,因为有时我会调试 DLL。

我的问题是:为什么这样做有效? ASLR 如何帮助解决这个问题?

我的一位朋友有一个有趣的答案我想分享:

“它的错误来自 NtCreateUserProcess 的内核,在这个 api 中,调用 ZwMapViewOfSection 将可执行图像映射到内存。在我们的例子中,MapView returns STATUS_CONFLICTING_ADDRESSES。 如果您阅读 ZwMapViewOfSection 文档,您会看到 Windows 缓存了一些地址范围,因此如果没有 ASLR 的图像在缓存中请求地址,它会在 ZwMapViewOfSection 处失败。 这不会发生在 ASLR 中,因为 Windows 将保证新的图像基地址不会在任何缓存范围内。