我有一个小的32位进程我在win7 x64上调试,我看到它按预期加载“C:\ windows \ sysWow64 \ ntdll.dll”,但也“C:\ windows \ system32 \ ntdll.dll “
。
我知道x64模块和x86模块不混合,但在这里它们......混合...
怎么会这样?
答案 0 :(得分:5)
这是WOW64的一个特殊“功能”,请参阅MSDN上的this article。相关部分是:
WOW64模拟器以用户模式运行。它提供了一个接口 32位版本的Ntdll.dll和处理器的内核,以及 它拦截内核调用。 WOW64模拟器由 以下DLL:
Wow64.dll提供核心仿真基础架构和thunk 用于Ntoskrnl.exe入口点函数。
Wow64Win.dll提供 Win32k.sys入口点函数的thunk。
Wow64Cpu.dll是一个 提取主机特征的接口库 处理器。 (仅限Intel Itanium)
IA32Exec.bin包含x86软件 模拟器。 (仅限Intel Itanium)
Wowia32x.dll提供了界面 在IA32Exec.bin和WOW64之间。
这些DLL以及64位 Ntdll.dll的版本,是唯一可以加载的64位二进制文件 进入32位进程。