
所有的WoW64应用程序都要经过WoW64模拟层。
我想知道这一层发生了什么(特别是它们如何转换地址空间)。
请给我一些重要的观点。
发布于 2011-03-24 08:29:33
由于您已经发布了该图,因此很明显您知道WOW64存在的原因。现在回答你的问题:
我想知道这一层发生了什么。
我想你想知道它是如何实现的。
进程启动:加载器像往常一样加载64位用户模式部分' Ntdll.dll‘,但也加载32位Ntdll.dll,以防进程用于32位执行。现在由加载器负责使用Wow64.dll进行初始化,它在32位Ntdll中设置进程和线程上下文,并“将CPU切换到32位模式”以供执行。
系统调用:现在一切都在32位模式下运行,直到系统调用。我们知道系统调用通过Ntdll.dll、User32.dll和Gdi32.dll等;在本例中是32位版本。这些库在\Windows\Syswow64位文件夹中有一个单独的32位版本。这些只是存根,而不是发出“本机系统调用”,实际上是在Wow64.dll中调用。现在,Wow64.dll很容易转换到64位模式,将参数转换为对应的64位参数,使用64位版本发出系统调用,获得结果,然后将输出重新转换为32位。然后,它将CPU转换回32位模式并返回输出。
异常分派、用户回调、文件系统和注册表操作以及I/O都是以相同的方式处理的,使用的是钩子。阅读下面规定的书。
(特别是它们如何转换地址空间)。
64位地址空间是32位地址空间的超集。此外,32位/64位中的相同指针(实际上是PTE)不是用来引用整个地址空间的,但是用户空间和系统空间有单独的页表。
请给我一些重要的观点。
要了解windows,我能给你的最重要的一点是阅读“Windows内部结构”-- Russinovich
发布于 2011-03-16 21:13:45
MSDN说:
WOW64是一个x86模拟器,它允许基于Windows32位的应用程序在64位Windows上无缝运行。WOW64随操作系统提供,不必显式启用。
该系统将32位应用程序与64位应用程序隔离,这包括防止文件和注册表冲突。支持控制台、GUI和服务应用程序。该系统为剪切、粘贴和COM等方案提供了跨32/64边界的互操作性。但是,32位进程无法加载64位DLL以供执行,64位进程无法加载32位DLL以供执行。
你有什么特别不明白的?您已经阅读了WoW64子系统上的Wikipedia article了吗?我想你会发现它提供了一个相当全面的概述。
微软在这里提供了一些额外的细节:WOW64 Implementation Details
发布于 2011-03-16 21:26:11
尤其是,它们如何转换地址空间
关键是要知道,amd和英特尔x64处理器支持并行运行32位和64位代码。这允许os (当运行本机x64时)为具有与64位线程共存的32位寻址的32位线程创建上下文
以类似的方式,当主机os运行32位时,它可以创建用于运行win16和dos应用程序的16位线程。
注意,当在64位操作系统上运行时,我不认为它可以创建32位和16位线程-我猜和我认为这只是太多的向后兼容性:-)
https://stackoverflow.com/questions/5325750
复制相似问题