WoW64仿真层做什么?

时间:2011-03-16 13:09:32

标签: windows dll 64-bit wow64

enter image description here

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

请给我一些重点。

3 个答案:

答案 0 :(得分:8)

由于您已经发布了图表,因此很清楚您知道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,我能给你的最重要的一点是阅读'Windows Internals' - Russinovich

答案 1 :(得分:2)

MSDN说:

  

WOW64是x86仿真器,允许32位基于Windows的应用程序在64位Windows上无缝运行。 WOW64随操作系统提供,无需明确启用。

     

系统将32位应用程序与64位应用程序隔离,其中包括防止文件和注册表冲突。支持控制台,GUI和服务应用程序。该系统提供跨32/64边界的互操作性,适用于剪切和粘贴以及COM等场景。但是,32位进程无法加载64位DLL以执行,而64位进程无法加载32位DLL以供执行。

具体你不明白什么?您是否已阅读WoW64子系统上的Wikipedia article?我想你会发现它提供了一个相当全面的概述。

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

答案 2 :(得分:-1)

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

关键是知道amd和intel x64处理器支持并行运行32位和64位代码。这允许操作系统(当运行本机x64时)为32位线程创建一个上下文,该线程具有与64位线程共存的32位寻址

以类似的方式,当主机操作系统运行32位时,它可以创建16位线程来运行win16和dos应用程序。

请注意,我不认为在os 64bit中运行时它可以创建32位和16位线程 - 我想我觉得这太过于向后兼容: - )