大家好,欢迎来到IT知识分享网。
为了在windows 64位系统上运行32位用户态程序,Windows操作系统有一个Wow64子系统来转换处理32位程序的调用请求。
当32位程序调用api接口时,32位接口会去调用64位的ntdll,如果存在指针,那么会把指针转化为8字节,从内核返回后,又会将64位指针转化为32位的。
还有 文件系统重定向以及注册表重定向需要注意。
在64位系统上,如果32位程序访问系统盘下 Windows\System32路径,那么会默认转换到Windows\SysWOW64路径下,也就是说要在Windows\System32目录下存放文件时,会默认存储到Windows\SysWOW64路径下,System32路径下是64位的系统dll,SysWOW64路径下是32位的系统dll。
要想关闭文件系统重定向可以使用如下API接口
BOOL WINAPI Wow64DisableWow64FsRedirection(_Out_ PVOID * OldValue);
传入一个指针,用于保存原来的值,方便之后恢复,调用上面函数后就关闭了文件系统重定向。
现在就可以在真实的system32位目录下存取文件了,执行完自己的操作后需要恢复文件系统重定向,使用如下API
BOOL WINAPI Wow64RevertWow64FsRedirection(_In_ PVOID OlValue);
传入调用Wow64DisableWow64FsRedirection返回的数据,就可以恢复了,注意这两个API需要配套使用。
注册表重定向指的是32位程序访问HKEY_LOCAL_MACHINE\SOFTWARE时会自动重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下。
如果需要指定访问32位的注册表还是64位的注册表,那么需要在调用RegCreateKeyEx时指定标志位,如下:
KEY_WOW64_64KEY 如果32位程序想打开64位注册表,可以使用此标志。
KEY_WOW64_32KEY 如果64位程序想打开32位注册表,可以使用此标志。
使用64位 windbg调试32位程序时,可以在32位模式与64位模式之间切换查看函数调用栈。
.effmach x86可以切换到32位程序
.effmach amd64可以切换到64位程序
WoW(Windows 32 on Windows 64)进程 中存在两个ntdll,一个64位,一个32位的,32位的ntdll后加载,所以模块名为ntdll_XXXXXX,后面跟的是地址。
在Wow进程中,每个进程有两个PEB,每个线程有两个TEB,使用命令!wow64exts.info可以显示双份资产
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30673.html