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 ...
随机推荐
- linux-3.0内核移植到fl2440开发板(以s3c2410为模板)
1.新建kernel文件夹,用于存放内核文件 [weishusheng@localhost ~]$ mkdir kernel 2.进入kernel,上传压并解压压缩文件 [weishusheng@lo ...
- struts2添加需要的jar包
转自:https://blog.csdn.net/fance611261/article/details/6790737 以前总是在myeclipse中添加jar包的,由于现在转向了eclipse,原 ...
- 昆石VOS3000_2.1.4.0完整安装包及安装脚本
安装包下载地址:http://www.51voip.org/post/54.html 安装教程: 上传安装包 ·给整个目录授权 chmod 777 /root/vosintsall `核实 关闭sel ...
- Untiy检测各类设备输入
轴需要单独设置 using UnityEngine; using System.Collections; using UnityEngine.UI; public class OutputKey : ...
- Struts+Spring+Hibernate处理Lob(Blob,Clob)
在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用Blob字段或Clob字段来存储二进制图片.流媒体或文件.现就将在实际开发中遇到 ...
- Hue的全局配置文件hue.ini(图文详解)
Hue版本:hue-3.9.0-cdh5.5.4 需要编译才能使用(联网) 说给大家的话:大家电脑的配置好的话,一定要安装cloudera manager.毕竟是一家人的.同时,我也亲身经历过,会有部 ...
- Linux下rpm、yum和源码三种安装方式详细介绍
第1章 源码安装 源码包安装会比RPM包安装慢,是因为RPM的软件包是根据特定系统和平台而指定的,经常一种 程序会提供很多RPM包的格式,用户根据系统情况选择适合的RPM包直接安装,而源码包相当于 通 ...
- websocket来回收发消息
# server- # pip install geventwebsocket# pip install flask from flask import Flask, render_template, ...
- scikit-learning教程(二)统计学习科学数据处理的教程
统计学习:scikit学习中的设置和估计对象 数据集 Scikit学习处理来自以2D数组表示的一个或多个数据集的学习信息.它们可以被理解为多维观察的列表.我们说这些阵列的第一个轴是样本轴,而第二个轴是 ...
- codeforces 149D Coloring Brackets (区间DP + dfs)
题目链接: codeforces 149D Coloring Brackets 题目描述: 给一个合法的括号串,然后问这串括号有多少种涂色方案,当然啦!涂色是有限制的. 1,每个括号只有三种选择:涂红 ...