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 ...
随机推荐
- 【202】ThinkPad手势&快捷键
快捷键: Ctrl + Alt + ↑:正常屏幕Ctrl + Alt + ↓:翻转屏幕Ctrl + Alt + →:向左侧翻转90°Ctrl + Alt + ←:向右侧翻转90° 首先看下 Esc 键 ...
- thinkpad开机引导方式变成PCI LAN选项解决
问题:开机的引导方式变成[PCI LAN],并且前面有一个小箭头,无法正常启动加载.在BIOS中重置调整启动顺序也无法解决.无法进入U盘启动盘 1.首先开机按F12进入BIOS,选择 APP Menu ...
- web服务端的架构演变
此文已由作者肖凡授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近Lofter项目碰到很多性能上的问题,特别是数据库相关的,每次推送后,告警就会第一时间到来.这些问题随着产 ...
- composer下载tp5第三方扩展
(谨记:如果使用 composer 命令安装失败,请查看根目录下的 composer.json 文件是否正确,并查看下的扩展是否有多个版本,下载的版本是否符合当前框架的版本) 1.基础 compose ...
- yield 为什么不能进入回调函数
操他妈的, allowed_domains = ['voice.hupu.com'] 这里面必须是域名,而不能是个路径,遇见问题不要瞎几把想,及时Google才是正道!!!!!!!!!11 感谢: h ...
- 多线程 synchronized锁定当前对象
synchronized(this) 和synchronized一样,都是锁定当前对象. public class Task { synchronized public void otherMetho ...
- socket通信模块
1 原理 1.1 模型 应用层协议需要必须传输数据,需要把数据封装为TCP/UDP包来传输,这个对TCP/UDP的封装就是socket通信.在socket里,包括send和receive. 一个服务器 ...
- 模拟赛01 T3 盖房子
题面 http://zhengruioi.com/problem/248 题解 三重容斥(说是两重也行吧) 我们来看题目的约束 ①有k个位置不能放(k≤8) ②每行每列至少一个 ③正负对角线至少一个 ...
- Helvetic Coding Contest 2017 online mirror (teams allowed, unrated) J
Description Heidi's friend Jenny is asking Heidi to deliver an important letter to one of their comm ...
- 复习Java和前端、后端框架等。
以下便是我开始复习时做的笔记.