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 有效:
- 我已禁用 App Locker
- 我已禁用防病毒软件
- 我关闭了 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 将保证新的图像基地址不会在任何缓存范围内。
我遇到了问题 运行 mshta.exe
。正如您在下图中看到的,我得到了错误:The system cannot execute the specified program.
我创建了一个test.hta
文件,但也无法执行。我已经尝试了这些解决方案,其中 none 有效:
- 我已禁用 App Locker
- 我已禁用防病毒软件
- 我关闭了 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 将保证新的图像基地址不会在任何缓存范围内。