我手动解析WOW64进程的PEB以获取加载的模块,并想知道为什么文件路径(FullDllName)指向模块的x64版本。
例如,ntdll.dll的文件路径(取自WOW64 PEB)指向System文件夹中的DLL,它将是x64 ntdll.dll,但是,我希望文件路径指向x86中的ntdll.dll。 SysWOW64文件夹?
为什么会这样?
在x64系统中,一些特殊目录和特殊注册表项分为两个独立的部分。对于文件系统,%systemroot%\system32
目录保留用于64位文件,32位文件重定向到%systemroot%\SysWOW64
目录。换句话说,所有32位程序通常只出现在%systemroot%\SysWOW64
目录中。尝试访问%systemroot%\system32
目录的任何32位程序都将重定向到%systemroot%\SysWOW64
目录。除非程序的线程明确指定需要关闭重定向机制,否则这是默认行为。
有时您需要在需要访问系统32文件夹时关闭重定向,因此MSDN提供了一组控制重定向的函数:
Wow64DisableWow64FsRedirection
MSDN提供DEMO,您可以参考