翻译自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. 北京师范大学第十四届ACM决赛-重现赛 F:Training Plan(DP)

    传送门 题意 将n个数分成m个集合,\(V_i表示max(x-y),x,y∈第\)i个集合,\(求minΣV_i\) 分析 我们先对难度排序,令dp[i][j]表示前i个数分成j个集合的最小费用 转移 ...

  2. cocos2d-html5基础

    1 环境搭建 版本Cocos2d-html5-v2.2,tomcat7.0 配置tomcat,然后直接解压Cocos2d-html5-v2.2.zip,访问解压后的根目录的index.html就可以看 ...

  3. 纯javaScript实现元素平滑滚动,改进前两个版本,支持鼠标滚轮滚动和点击元素滚动,滚动更顺畅

    windowScroll(id, number, distance, direction, obj) 参数介绍: 1.id:所要滚动的元素id; 2.number:滚动次数; 3.distance:每 ...

  4. 实例List化

    实现了__iter__()的实例虽能用于for循环,看似像list,但并不能将其当做list来使用,比如,Fib()[5]还是报错 可通过实现__getitem__()方法,:来实现让实例像list那 ...

  5. elasticsearch 查询 query

    对于 类型是 text的字段,并且分析器指明是ik_max_word的会建立倒排索引 查询的分类: match查询:  会自动转换大小写,会分词, term查询: 不会转换和分词,只能值匹配 term ...

  6. android 多线程(二)

    1. 使用 AsyncTask 实现进度条 package com.test.network; import android.os.AsyncTask; import android.support. ...

  7. AtCoder Grand Contest 005 C - Tree Restoring

    题目传送门:https://agc005.contest.atcoder.jp/tasks/agc005_c 题目大意: 给定一个长度为\(N\)的整数序列\(A_i\),问能否构造一个\(N\)个节 ...

  8. Backbone学习记录(3)

    创建视图 同前面创建模型和集合的方式一样,Backbone.View.extend()即可创建视图 var UserView=Backbone.View.extend(); var view1=new ...

  9. Linux--NiaoGe-Service-01

    安装环境介绍 CentOS 6.9_x86_64 我们选择的是基本安装,也即“Basic Server”. 安装完成后重启来到(runlevel 3)纯文本界面. 例题 批量创建账号:假设有5个账号x ...

  10. C#基础学习3

    运算符,表达式!