2012-04-17 58 views
4

我有一個小的32位進程,我在win7 x64上調試,我發現它按預期的方式加載了「C:\ windows \ sysWow64 \ ntdll.dll」,但也是「C:\ windows \ system32 \ ntdll.dll」 。
我知道x64模塊和x86模塊不會混合,但在這裏它們是...混合...
它怎麼可能?x64模塊在WOW64過程中?

回答

5

這是WOW64的一個特殊功能,請參見MSDN上的this article。相關部分是:

WOW64仿真器以用戶模式運行。它提供了Ntdll.dll的32位版本和處理器內核的 之間的接口,並且它攔截內核調用。該WOW64模擬器由 以下的DLL:

  • Wow64.dll提供了ntoskrnl.exe中的入口點函數的核心仿真基礎設施和的thunk 。

  • Wow64Win.dll爲Win32k.sys入門點函數提供了 thunks。

  • Wow64Cpu.dll是 接口庫抽象主機 處理器的特性。 (僅限Intel Itanium)

  • IA32Exec.bin包含x86軟件 模擬器。 (僅適用於Intel Itanium)

  • Wowia32x.dll在IA32Exec.bin和WOW64之間提供接口 。

這些DLL,與64位 版本的Ntdll.dll一起,是可以裝載到 一個32位過程的唯一的64位的二進制文件。