Wow64知识

Wow64知识为了在windows64位系统上运行32位用户态程序,Windows操作系统有一个Wow64子系统来转换处理32位程序的调用请求。当32位程序调用api接口时,32位接口会去调用64位的ntdll,如果存在指针,那么会把指针转化为8字节,从内核返回后,又会将64位指针转化为32位的。还有文件

大家好,欢迎来到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位程序

Wow64知识

 

 

.effmach amd64可以切换到64位程序

Wow64知识

 

WoW(Windows 32 on Windows 64)进程 中存在两个ntdll,一个64位,一个32位的,32位的ntdll后加载,所以模块名为ntdll_XXXXXX,后面跟的是地址。

在Wow进程中,每个进程有两个PEB,每个线程有两个TEB,使用命令!wow64exts.info可以显示双份资产

Wow64知识

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30673.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信