|
大家都知道,WOW64进程一般有4个64位的DLL,以及N个32位的DLL。
4个64位的DLL分别是:wow64.dll、wow64win.dll、wow64cpu.dll、ntdll.dll,它们都在c:\windows\system32目录下。
在N个32位的DLL中,有一个32位的NTDLL,它在C:\WINDOWS\SYSWOW64目录下。其它的系统DLL,比如kernel32.dll,也在SYSWOW64目录下。
但是在WIN8上,如果用EnumProcessModulesEx来枚举模块,你会发现:有两个BASE不同的NTDLL,但显示的路径都在SYSTEM32目录下;其它诸如kernel32.dll的系统DLL,也全在SYSTEM32目录下。但对比一下64位进程的同名DLL的BASE,又不相同。
我一开始对这个现象感到百思不得其解,后来通过WINDBG才看出:除了BASE大于0xFFFFFFFF的DLL,即使路径显示在SYSTEM32目录下,实际上却是在SYSWOW64目录下!!!
为了解决这个问题,我写了一段QUICK AND DIRTY的代码。当你输入c:\windows\syswow64\ntdll.dll,将返回32位NTDLL的基址,输入c:\windows\system32\ntdll.dll,将返回64位NTDLL的基址。
|
|