Wow64
翻译自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的更多相关文章
- 驱动里执行应用层代码之KeUserModeCallBack(WOW64是由三个动态库wow64.dll wow64win.dll wow64cpu.dll来实现)
在驱动层(ring0)里执行应用层(ring3)代码,这是个老生常谈的技术,而且方法也挺多. 这种技术的本质:其实就是想方设法在驱动层里把应用层代码弄到应用层去执行. 比如在APC异步调用中,KeIn ...
- Wow64(32位进程)注入DLL到64位进程
转载自: https://blog.poxiao.me/p/wow64-process-inject-dll-into-x64-process/ 向其他进程注入DLL通常的做法是通过调用CreateR ...
- 谈谈Windows Wow64
欢迎转载,转载请注明出处:http://www.cnblogs.com/lanrenxinxin/p/4977488.html 本文是<深入理解Windows操作系统 (第六版) >关于6 ...
- Windows WoW64浅析
WOW64(Windows-On-Windows 64bit)是X64 Windows操作系统的一个子系统,为32位应用程序提供运行环境.类似的还有WOW32子系统,负责在32位Windows系统上运 ...
- Win64 驱动内核编程-9.系统调用、WOW64与兼容模式
系统调用.WOW64与兼容模式 这种东西都是偏向于概念的,我就把资料上的东西整理下粘贴过来,资料来源于胡文亮,感谢这位前辈. WIN64 的系统调用比 WIN32 要复杂很多,原因很简单,因为 WIN ...
- Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Trident (又称为MSHTML),是微软的窗口操作系统(Windows)搭载的网页浏览器—Internet Explorer的排版引擎的名称. 它的第一个版本随着1997年10月Internet ...
- 【原】wow64 x86/x64 代码切换过程分析
下面以ntdll32!ZwQueryInformationProcess API为例分析 x86代码与x64代码之间的切换过程, 32bit的test程序: step1: ntdll32!ZwQuer ...
- wow64 32位进程中切换64位模式,取回64位寄存器值
32位dbg中编辑的: 7711E9D3 | 6A | | 7711E9D5 | E8 | 7711E9DA | | | 7711E9DE | CB | ret far | 6A E8 CB 64位d ...
- NodeJs之log4js
log4js log4js是一个管理,记录日志的工具. 其实与morgan的作用类似. 安装 npm install -g log4js log4js的6个日志级别 分别是:trace(蓝色).deb ...
随机推荐
- 北京师范大学第十四届ACM决赛-重现赛 F:Training Plan(DP)
传送门 题意 将n个数分成m个集合,\(V_i表示max(x-y),x,y∈第\)i个集合,\(求minΣV_i\) 分析 我们先对难度排序,令dp[i][j]表示前i个数分成j个集合的最小费用 转移 ...
- cocos2d-html5基础
1 环境搭建 版本Cocos2d-html5-v2.2,tomcat7.0 配置tomcat,然后直接解压Cocos2d-html5-v2.2.zip,访问解压后的根目录的index.html就可以看 ...
- 纯javaScript实现元素平滑滚动,改进前两个版本,支持鼠标滚轮滚动和点击元素滚动,滚动更顺畅
windowScroll(id, number, distance, direction, obj) 参数介绍: 1.id:所要滚动的元素id; 2.number:滚动次数; 3.distance:每 ...
- 实例List化
实现了__iter__()的实例虽能用于for循环,看似像list,但并不能将其当做list来使用,比如,Fib()[5]还是报错 可通过实现__getitem__()方法,:来实现让实例像list那 ...
- elasticsearch 查询 query
对于 类型是 text的字段,并且分析器指明是ik_max_word的会建立倒排索引 查询的分类: match查询: 会自动转换大小写,会分词, term查询: 不会转换和分词,只能值匹配 term ...
- android 多线程(二)
1. 使用 AsyncTask 实现进度条 package com.test.network; import android.os.AsyncTask; import android.support. ...
- AtCoder Grand Contest 005 C - Tree Restoring
题目传送门:https://agc005.contest.atcoder.jp/tasks/agc005_c 题目大意: 给定一个长度为\(N\)的整数序列\(A_i\),问能否构造一个\(N\)个节 ...
- Backbone学习记录(3)
创建视图 同前面创建模型和集合的方式一样,Backbone.View.extend()即可创建视图 var UserView=Backbone.View.extend(); var view1=new ...
- Linux--NiaoGe-Service-01
安装环境介绍 CentOS 6.9_x86_64 我们选择的是基本安装,也即“Basic Server”. 安装完成后重启来到(runlevel 3)纯文本界面. 例题 批量创建账号:假设有5个账号x ...
- C#基础学习3
运算符,表达式!