我正在调试win7 x64上的一个小型32位进程,我看到它像预期一样加载了“C:\windows\sysWow64\ntdll.dll”,但也加载了“C:\windows\system32\ntdll.dll”。 我知道x64模块和x86模块不能混合使用,但在这里它们却混合在一起了。 为什么会这样呢?
这是WOW64的一个特殊“功能”,请参见MSDN上的这篇文章。其中相关部分如下:引自文章:WOW64仿真器运行在用户模式下。它提供了32位版本的Ntdll.dll和处理器内核之间的接口,并拦截内核调用。WOW64仿真器由以下DLL组成:- Wow64.dll 提供核心仿真基础设施和 Ntoskrnl.exe 入口点函数的thunk。 - Wow64Win.dll 提供 Win32k.sys 入口点函数的thunk。 - Wow64Cpu.dll 是一个抽象主机处理器特性的接口库。(仅限 Intel Itanium) - IA32Exec.bin 包含 x86 软件仿真器。(仅限 Intel Itanium) - Wowia32x.dll 提供 IA32Exec.bin 和 WOW64 之间的接口。 这些DLL以及64位版本的Ntdll.dll是唯一可以加载到32位进程中的64位二进制文件。