4

我有一个在 win7 x64 上调试的小型 32 位进程,我看到它按预期加载了 "C:\windows\sysWow64\ntdll.dll" ,但也加载了 "C:\windows\system32\ntdll.dll" 。
我知道 x64 模块和 x86 模块不能混用,但他们在这里……混用……
怎么可能?

4

1 回答 1

5

这是 WOW64 的一个特殊“功能”,请参阅MSDN 上的这篇文章。相关部分是:

WOW64 模拟器在用户模式下运行。它提供了 32 位版本的 Ntdll.dll 和处理器内核之间的接口,并拦截内核调用。WOW64 模拟器由以下 DLL 组成:

  • Wow64.dll 为 Ntoskrnl.exe 入口点函数提供核心仿真基础结构和 thunk。

  • Wow64Win.dll 为 Win32k.sys 入口点函数提供 thunk。

  • Wow64Cpu.dll 是一个抽象主处理器特性的接口库。(仅限英特尔安腾)

  • IA32Exec.bin 包含 x86 软件模拟器。(仅限英特尔安腾)

  • Wowia32x.dll 提供了 IA32Exec.bin 和 WOW64 之间的接口。

这些 DLL 以及 64 位版本的 Ntdll.dll 是唯一可以加载到 32 位进程中的 64 位二进制文​​件。

于 2012-04-17T15:45:15.667 回答