enter image description here

所有WOW64应用程序都通过WOW64仿真层。
我想知道这一层会发生什么。(尤其是他们如何转换地址空间)

请给我一些重要的观点。

有帮助吗?

解决方案

由于您已经发布了图表,因此很明显您知道为什么存在WOW64。现在回答您的问题:

我想知道这一层会发生什么。

我认为您想知道它是如何实施的。

流程启动:加载程序像往常一样加载64位用户模式零件'ntdll.dll',但也加载32位ntdll.dll,以防该过程用于32位执行。现在,使用WOW64.DLL初始化的负载责任,该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

其他提示

MSDN 说:

WOW64是X86模拟器,允许32位基于Windows的应用程序在64位Windows上无缝运行。 WOW64配备了操作系统,不必明确启用。

该系统将32位应用程序与64位应用程序隔离,其中包括防止文件和注册表碰撞。支持控制台,GUI和服务应用程序。该系统在32/64边界上提供了诸如剪切和粘贴和com之类的方案的互操作性。但是,32位进程无法为执行加载64位DLL,而64位进程无法为执行加载32位DLL。

什么 具体来说 难道你不明白?你已经阅读了 维基百科文章 在WOW64子系统上?我认为您会发现它提供了相当全面的概述。

Microsoft在此处提供了一些其他详细信息: WOW64实施详细信息

“特别是,他们如何转换地址空间”

关键是知道AMD和Intel X64处理器对运行32位和64位代码并排支持。这允许操作系统(运行本机X64时)为具有32位地址的32位线程创建上下文,该线程与64位线程共存

当主机操作系统运行32位时,它可以创建16位线程用于运行Win16和DOS应用程序。

请注意,我认为在OS 64位运行时不会创建32位和16位线程 - 我想AMD认为这是过多的向后兼容性:-)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top