WoW64仿真层做什么?

Ben*_*min 6 windows dll 64-bit wow64

在此输入图像描述

所有WoW64应用程序都通过WoW64仿真层.
我想知道这一层发生了什么.(特别是它们如何转换地址空间)

请给我一些重点.

zam*_*shi 9

由于您已经发布了图表,因此很清楚您知道WOW64存在的原因.现在回答你的问题:

我想知道这一层发生了什么.

我想你想知道它是如何实现的.

进程启动:加载程序像往常一样加载64位用户模式部分'Ntdll.dll',但如果进程是32位执行,也会加载32位Ntdll.dll.现在负责使用Wow64.dll进行初始化,Wow64.dll在32位Ntdll中设置进程和线程上下文,并"将CPU切换到32位模式"以便执行.

系统调用:现在一切都在32位模式下运行,直到系统调用.我们知道系统调用通过Ntdll.dll,User32.dll和Gdi32.dll等; 在这种情况下是32位版本.这些库中有一个单独的32位版本位于\ Windows\Syswow64位文件夹中.这些只是存根而不是发出"本机系统调用",实际上是在Wow64.dll中调用.现在,Wow64.dll转换到64位模式,将参数转换为64位版本,使用64位版本发出系统调用,获取结果并将输出重新转换为32位是很简单的.然后它将CPU转换回32位模式并返回输出.

异常调度,用户回调,文件系统和注册表操作以及I/O以相同的方式处理,使用某处的挂钩.阅读下面规定的书.

(特别是,它们如何转换地址空间).

64位地址空间是32位地址空间的超集.另外,32位/ 64位中的相同指针(实际上是PTE)不用于指代整个地址空间,但是有用于用户空间和系统空间的单独页表.

请给我一些重点.

要了解窗口,我能给你的最重要的一点是阅读'Windows Internals' - Russinovich