Wow!什么是Wow64

今天有个同事,被SysWow64搞晕了。这里简单介绍一下。

64位的Windows并不是简单地把所有东西都编译成64位就万事大吉的。关于64位的CPU应该做成什么样子,Intel和AMD曾有各自的打算。AMD的回答直接了当:新的64位处理器,应该能在提高更高处理能力的同时,保持对32位应用程序的兼容性。而Intel则希望借此机会,把下一代的处理器,设计得更完美。于是,就有了AMD的x86-64(后被称为amd64)的处理器和Intel的IA-64(安腾)处理器。和amd64不一样的是,安腾处理器并没有很好地提供对32位应用程序的支持。具体信息,读者在网上应该很容易找到,也就不多说了。

Windows作为一个操作系统,自然希望用户在运行64位操作系统时,也能像以前一样,运行各种32位应用程序。这一点,在amd64处理器上,相对容易做到。而安腾,几乎是另外一回事。(后来Intel也生产了兼容amd64的处理器,但那是后话。)

虽然我说“相对”容易做到,但也不是空手套白狼。当操作系统运行在64位时,怎么才能保证已经存在的32位应用程序以为自己仍然运行在32位系统上呢?微软的解决方案是:Wow64,全称是32bit Windows On 64bit Windows(64位Windows上的32位Windows)。

你也可以这样理解,虽然整个系统是运行在64位模式,但如果一个应该程序是32位的,Windows会在64位的基础上,加载一个“32位的Windows”。这样,这个32位应用程序就以为自己是运行在32位的系统之上的。

于是,你也可以想象,这就意味着,64位的Windows,不但带有64位操作系统应有的系统文件,还带有32位系统应有的系统文件。

我们都知道的是,Windows系统的主要系统文件都是放在一个叫做System32的文件夹中的。为了能同时放下两套系统文件,Windows会在64位的系统上,增加了一个文件夹,叫SysWow64。

这便有了一个问题,System32和SysWow64里面,哪个放的是64位的系统文件,哪个放的是32位的系统文件呢?

如果你还记得Wow64指的是64位Windows上的32位Windows,那么,你就能会想到,SysWow64里放的是32位的系统文件。但你也可能会问,为什么一个明明叫System32的文件夹装的是64位的系统文件,而一个明明叫SysWow64的文件夹装的却是32位的系统文件呢?既然是64位的系统,为什么不能有System64和System32这样的文件夹呢?

这个问题问得很好。答案也很简单:人在江湖,身不由己。

兼容性

如果我问你,可曾有多少机会接触过安腾处理器呢?我想,对于一般人来讲,应该是没有的。那为什么amd64会大行其道,而安腾处理器却鲜为人知呢?还是因为一个软硬件设计上的关键概念:兼容性。

正是因为安腾处理器,没有做好对已有的32位系统提供良好的支持,便其一直处于市场的边缘。这和你不会买一台看不了模拟信号频道的高清电视是一个道理。

之前我们谈到的兼容性,是指在64位Windows上,兼容已经有的32位应用程序。现在考虑另一种兼容性。

如果你写了一个很牛的32位的应用程序,现在,你想把它变成64位的应用程序,以更充分地利用64位处理器所带来的新的处理能力。你肯定觉得,这不就是让64位编译器编译一遍就完了的事儿么?可能你发现,这并不是骨感的现实。你突然发现,你的程序里,为了某些你已经想不起来的原因,把System32这个文件夹,写死在了你的程序里。而这个System32中的32,让你很不安。你尝试着运行了你的程序,却发现一切正常。为什么呢?因为这是Windows系统的另一个兼容性方面的努力:让一个已有的32位应用程序,不加修改或者尽可能少地加以修改,便可以被编译成64位应用程序并在64位Windows上运行。其实,把System32这样的路径,写死在程序里,并不是一个个案。所以,为了保证这些应用程序可以顺利地过渡到64位,Windows最后还是决定让64位的系统文件放在System32的文件夹下。而让32位的系统文件,搬到了SysWow64中去。

你肯定会想,那让32位搬到SysWow64中去以后,那些写死在32位应用程序中的System32怎么办?答:Windows会给他们转向到SysWow64中去。那让64位中的System32转向到System64不也是一样么?真的一样么?不一样么?真的一样么?不一样么?真的不一样。

作为64位Windows操作系统,当然是希望能充分发挥64位处理器的潜力,让应用程序更有效率地运行。如果在运行64位应用程序时,总要检查是否需要转向,势必影响程序运行效率。所以,不能给64位应用程序做没有必要的转向,如果说必须要转,那就只能转32位应用程序了。是的,没有办法,在64位操作系统中,32位应用程序要做一些小的牺牲。

此外,为了保证32位应用程序不与64位应用程序相冲突,除了System32文件夹外,注册表也需要为32位和64位提供两套,也需要让32位的应用程序在必要时重定向。

结论

所以SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方。

后记

兼容性是一个重要的事情。当然,也是一个很有意思的事情。如果你在Windows 7中运行"winver",你就会发现,Windows 7原来是Windows 6.1。为什么呢?事情是这样的,Windows XP是Windows 5.2,Windows Vista开始变成了6.0,结果,很多应用程序只是检查操作系统版本号的头一位,发现不是5,于是就提示用户说:“我们不支持Windows XP以前的系统”。这也是从Windows Vista的不成功中,学习到的一课。也许,以后永远都没有Windows 7.0也未可知啊。

什么是SysWow64,什么是System32相关推荐

  1. 解决QT出现XXXX.dll不能加载问题

    第一步:下载相关动态链接文件(这里以ig4icd32.dll为例子) 下载地址:ig4icd32.dll文件 第二步:把下载的文件放在两个地方,记住!一定得放在两个地方,我试了少一个都不行! C:\W ...

  2. python 处理excel

    参考:http://cocobear.info/blog/2009/01/16/use-python-deal-with-excel/ 使用Python对Excel进行统计,然后把结束生成一个新的Ex ...

  3. 【UACME】在Win11上的发展

    UACME 是一个收集各种已经公开的UAC Bypass方法的工具,在Github上开源.但是似乎作者最近没有及时更新他的方案说明.目前已公布的76中绕过UAC的方法如下: 注意: (1)在Win11 ...

  4. 安装Modem Meta遇到的DLL问题

    1. dll丢失 这个简单,网上找到对应的库文件,放到程序安装目录即可. D:\Program Files (x86)\Modem META ver 10.1916.0.00 2. 无法定位程序输入点 ...

  5. 64位和32位驱动开发的差异

    64位系统新增机制 1. WOW64子系统 WOW64子系统是64位系统为了兼容32位应用程序而新增的子系统.相当于一个轻量级的兼容层,主要在应用层工作,由三个DLL实现,Wow64.dll.Wow6 ...

  6. 171231 逆向-64位系统

    1625-5 王子昂 总结<2017年12月31日> [连续第457天总结] A. x64程序和逆向 B. 64位系统 CPU 32位时代,Intel主导着技术主流(x86),AMD则生成 ...

  7. D05——C语言基础学PYTHON

    C语言基础学习PYTHON--基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...

  8. Windwos中system、System32、SysWOW64区别

    system:存放16位的系统文件:windows x86和x64皆存在 System32:在windows x86中存放32位的系统文件:在windwos x64中存放64位的系统文件 SysWOW ...

  9. 為什麼system32中放的是64位dll,syswow64中放的是32位dll

    轉載自: http://cncc.bingj.com/cache.aspx?q=syswow64+system32+differenece&d=4721794509439110&mkt ...

  10. 64位系统 system32 和 syswow64

    64位系统 system32 和 syswow64 \Windows\SysWOW64  文件夹下存放32位的库和应用程序 (WOW64 == Windows on Windows 64 bit  ) ...

最新文章

  1. HDU - 5875 2016 ACM/ICPC 大连网络赛 H题 暴力
  2. Abaqus用户子程序umat的学习
  3. linux下搭建hadoop环境步骤分享
  4. java设计模式4--建造者模式(Builder)
  5. 浏览器对F5的微观处理
  6. Spring Boot 集成 Druid 监控数据源
  7. HTML5 CANVAS 弹幕插件--DanMuer.js(V3.2.5)
  8. 数据结构与算法分析(十)——母牛的故事
  9. 995. K 连续位的最小翻转次数
  10. 跳一跳外挂的python实现--OpenCV步步精深
  11. 无法访问移动磁盘显示磁盘未被格式化的文件寻回方案
  12. jQuery选择器的的优点
  13. centos服务器安装docker步骤
  14. 电信笔试C语言,2021中国电信考试试题附答案(12)
  15. [流媒体服务器搭建] EasyDarwin服务器搭建及客户端推流完整示例
  16. 惠普打印机 HP web 服务打不开
  17. 干货!如何建立数据标签体系
  18. 销宝:落地页转换率如何提高?
  19. 你BT我更BT!记一次入侵BT服务器
  20. 程序员职业生涯规划必读的十本书

热门文章

  1. Python习题——2018-03-28作业
  2. 解读神经网络十大误解,再也不会弄错它的工作原理
  3. 用友U8 cloud释放新动能,加速城投行业数智化转型
  4. 水质检测 — TDS模块
  5. 教你用Python制作微信好友背景墙
  6. java折线图_如何用java 画折线图
  7. 苹果手机微信消息备份
  8. 如何提高用户逃离成本
  9. 第七十三集 KVM虚拟化☜(゚ヮ゚☜)
  10. 『转』Unicode汉字编码表