翻译自Wikipedia

  WoW64

  运行在微软平台上,WoW64(Windows 32-bit on Windows 64-bit) 是一个Windows的子操作系统, 它能运行32位的应用,在所有的64位版本Windows中——WindowsXP Professtion x64版本,IA-64版本,Windows 2003服务器x64版本,Windows Vista 64位版本,Windows 2008服务器,Windows 8.1和Windows 10.在Windows 2008 R2服务器内核,WoW64是一个可选组件,但是不存在于Nano 服务器中。WoW64目的在于处理32位Windows和64位Windows之间的许多差异,特别是涉及Windows它自己的结构变化。

  转化函数库 (Translation libraries)

  这个WoW64子系统包含了一个轻量容器层。该容器层有许多相似的结构在所有的64位版本的Windows上。它目的是创建一个32位环境。在一个64位系统上,这个环境提供接口来运行未修改的32位程序Windows应用。WoW64是通过使用几个DLL(dynamic linker library, 动态链接库)实现的,其中一些包括:

  (1)Wow64.dll: 面向WindowsNT的核心接口,它转换32位函数调用至64比特,包括指针和调用库函数操作。

  (2)Wow64win.dll:它为32位应用程序提供合适的入口点。

  (3)Wow64cpu.dll:它负责进程从32位转换至64位模式。它只用于在x86-64的实现。

其他DLL和二进制文件包含在Itanium和ARMv8 64位架构中,来模拟x86或32位入口点,前提是该体系结构具有本机32位操作模式。

  架构(Architectures)

  尽管WoW64对外表现像全版本的64位操作系统,但是它的实现取决于目标指令集的架构。例如为Intel Itanium 2处理器(称为IA-64架构)开发的64位Windows的版本使用Wow64win.dll在IItanium2独特的指令集内构建x86指令的仿真。当需要执行32位线程时,仿真将转换处理器硬件至兼容模式,然后转换回64位模式,比较在Wow64win.dlll的函数在x86-64架构上,Itanium 2的仿真是计算代价更高昂的任务。

  注册表和文件系统(Registry and File system)

  WoW64子系统也能处理运行32位应用时其他重要方面。它参与管理32应用程序与Windows组件(如注册表)之间的交互,注册表对64位和32位应用程序存在不同的注册表键。例如HKEY_LOCAL_MACHINE\Software\Wow6432Node 对32位应用等同于HKEY_LOCAL_MACHINE\Software(尽管32位应用感觉不到这个重定向)。它们的一些注册表键从64位映射到32位是等效项,而其他注册表项则根据Windows版本对其内容进行进行镜像。

  在操作系统中,64位函数库和可执行文件使用%SystemRoot%\System32文件夹。这样做的原因是为了向后兼容性,因为许多遗留应用被硬编码使用该路径。在执行32位应用程序时,Wow将32位DLL透明地重定向至文件夹%SystemRoot%\SysWoW64。这个文件夹存放着32位函数库和可执行文件。但重定向有一些例外是:

  %SystemRoot%\system32\catroot
%SystemRoot%\system32\catroot2
%SystemRoot%\system32\driverstore
%SystemRoot%\system32\drivers\etc
%SystemRoot%\system32\logfiles
%SystemRoot%\system32\spool
%SystemRoot%\system32\driverstore (only for Windows Server , Windows Vista, Windows Server and Windows XP)

32位应用通常不会感觉到它们运行在64位操作系统。32位应用能够通过伪目录 %SystemRoot%\sysnative 访问 %SystemRoot%\System32 。

  有两个 Program Files 目录,每个对于32位和64位应用程序均可见。储存32位文件的文件夹叫作 Program Files(x86) 以区分这两者,而64位保留传统的Program Files名称而没有任何其他限定符。

  应用兼容性(Application compatibility)

仅包含32位内核模式设备驱动程序,或插入纯粹以64位进程实现的组件的进程空间的32位应用程序(例如Windows资源管理器)无法在64位平台上执行。

  支持32位服务。位于操作系统驱动器的Windows文件夹中的SysWOW64文件夹包含多个支持32位应用程序的应用(例如,cmd.exe,为了32位应用程序注册ODBC连接的odbcad32.exe)。MS-DOS的16位遗留程序和早期版本的Windows通常是不兼容于64位版本的Windows Vista

7、8和10,但是通过MIcrosoft Virtual PC或DOSBox,能够被运行16位或32位Windows操作系统。另一方面32位版本的Windows XP、Vista、7、8和10通常能几乎完美运行16位应用。16位应用不能直接运行在x64版本的Windows下,因为运行在x64模式时,CPU不支持VM86模式。

  IE浏览器因为有大量的ActiveX组件无法插入64位版本,所以实现了32位版本和64位应用程序。32位版本被默认使用,而且很困难设置64位版本为默认浏览器。在WoW64的64位版本的转换层BUG

也导致所有依赖于Windows API的GetThreadContext函数的32位应用程序不兼容。这些应用程序包括应用程序调试器,调用堆栈跟踪器(例如,展示调用堆栈的IDE)以及使用垃圾回收(GC)引擎的应用程序。

Wow64的更多相关文章

  1. 驱动里执行应用层代码之KeUserModeCallBack(WOW64是由三个动态库wow64.dll wow64win.dll wow64cpu.dll来实现)

    在驱动层(ring0)里执行应用层(ring3)代码,这是个老生常谈的技术,而且方法也挺多. 这种技术的本质:其实就是想方设法在驱动层里把应用层代码弄到应用层去执行. 比如在APC异步调用中,KeIn ...

  2. Wow64(32位进程)注入DLL到64位进程

    转载自: https://blog.poxiao.me/p/wow64-process-inject-dll-into-x64-process/ 向其他进程注入DLL通常的做法是通过调用CreateR ...

  3. 谈谈Windows Wow64

    欢迎转载,转载请注明出处:http://www.cnblogs.com/lanrenxinxin/p/4977488.html 本文是<深入理解Windows操作系统 (第六版) >关于6 ...

  4. Windows WoW64浅析

    WOW64(Windows-On-Windows 64bit)是X64 Windows操作系统的一个子系统,为32位应用程序提供运行环境.类似的还有WOW32子系统,负责在32位Windows系统上运 ...

  5. Win64 驱动内核编程-9.系统调用、WOW64与兼容模式

    系统调用.WOW64与兼容模式 这种东西都是偏向于概念的,我就把资料上的东西整理下粘贴过来,资料来源于胡文亮,感谢这位前辈. WIN64 的系统调用比 WIN32 要复杂很多,原因很简单,因为 WIN ...

  6. Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

    Trident (又称为MSHTML),是微软的窗口操作系统(Windows)搭载的网页浏览器—Internet Explorer的排版引擎的名称. 它的第一个版本随着1997年10月Internet ...

  7. 【原】wow64 x86/x64 代码切换过程分析

    下面以ntdll32!ZwQueryInformationProcess API为例分析 x86代码与x64代码之间的切换过程, 32bit的test程序: step1: ntdll32!ZwQuer ...

  8. wow64 32位进程中切换64位模式,取回64位寄存器值

    32位dbg中编辑的: 7711E9D3 | 6A | | 7711E9D5 | E8 | 7711E9DA | | | 7711E9DE | CB | ret far | 6A E8 CB 64位d ...

  9. NodeJs之log4js

    log4js log4js是一个管理,记录日志的工具. 其实与morgan的作用类似. 安装 npm install -g log4js log4js的6个日志级别 分别是:trace(蓝色).deb ...

随机推荐

  1. UI:数据库练习、滤镜效果

    相机处理滤镜效果 滤镜主要使用在相机的美颜. #import "ViewController.h" #import "ImageUtil.h" #import ...

  2. Java调用Static修饰的本类方法

    public class Dy { public static void main(String[] args){ int a=6; int b=5; int result=0; result=Add ...

  3. 6-9 Haar+adaboost人脸识别

    我们重点分析了Haar特征的概念以及如何计算Haar特征,并介绍了Haar+Adaboost分类器它们的组合以及Adaboost分类器如何使用和训练.这节课我们将通过代码来实现一下Haar+Adabo ...

  4. Windows可以ping通百度,但是用浏览器打不开网页

    开始——>运行——>输入cmd回车——>输入: netsh winsock reset  命令(重置winsock文件)——>重启系统. 重启完系统,即可解决:如不能,请再查找 ...

  5. SCUT - 243 - 宝华复习 - 二分 - 桶计数

    https://scut.online/p/243 这道题唯一难点在于如何快速确定m合法.可以统计滑动窗口中已有元素的数量. #include<bits/stdc++.h> using n ...

  6. scrapy将爬取到的数据存入elasticsearch

    pip安装 elasticsearch-dsl的包, 是elasticsearch提供给python 的接口 if __name__ == "__main__": 这个用来调试,还 ...

  7. $BREEZE'S Diary$

    蒟蒻的日记没什么好看的. 2019-01-28 期末砸了. 洛谷开创小号. 开创博客园. 2019-01-29 坐标:义乌中学 咱今天又来义乌中学受虐了 感谢hjf给咱一次爆0的机会 题解 2019- ...

  8. Python标准库 urllib

    urllib是python的一个获取url的模块.它用urlopen函数的形式提供了一个非常简洁的接口.这使得用各种各样的协议获取url成为可能.它同时 也提供了一个稍微复杂的接口来处理常见的状况-如 ...

  9. Codeforces 1107G(dp)

    1.答案要取连续的区间疯狂暗示线段树. 2.外层枚举r,内层枚举l显然过于暴力. 3.考虑内层的优化.dp[i]:以第i位为结尾的答案(长度大于1的).dp[i] = max(第一种情况,第二种情况) ...

  10. Educational Codeforces Round 46 (Rated for Div. 2) A. Codehorses T-shirts

    Bryce1010模板 http://codeforces.com/problemset/problem/1000/A 题意: 问你将一种类型的衣服转换成另一种的最小次数. #include<b ...