windows 10是如何做到全平台统一的?

1、EXE本身就是个容器,它可以在ARM平台上包含ARM的native code执行,也可以在x86平台上包含x86的native code执行,本质上无差别(所以麻烦那些说EXE不能在ARM平台上运行的同学自删答案可以吗?)。

2、APPX文件里并不包含字节码,而是各种架构的native code的混合物,微软确实想用.net的字节码来统一天下,但现在大部分APPX文件都是native code。

-------------------------正文-------------------------

从原理上说,一个操作系统能同时在不同的平台上运行“相同”(注意引号)的代码,无非有两种形式:

1、学Java那样,做字节码,然后解释执行,只需要在不同平台上做好解释器即可;

2、如果要同时支持x86平台和ARM平台,那么就同时发布两个版本的二进制文件,然后封装到一起就好了;

你们觉得微软会那种方式呢?




















当然是第二种了
!微软自古以来兼容性的包袱都非常,你们以为微软可能会彻底从写一个平台把上万个WindowsAPI用Java或者别的什么语言重新封装一次?别做梦了。

你们以为Windows能在ARM上运行肯定是微软搞了什么黑科技吧?其实只不过是把目标文件设置成ARM格式然后重新把Windows编译一遍而已,arch相关的部分要重新实现一下就OK了。也就是说在ARM上运行的Windows,用的就是ARM的硬件指令,根本没有什么黑科技。N年前就有人试过,把Windows改成Java的话效率会降低到原来的三分之一(不对这句话真实性负责)。

然后有人会举手提问说:唉?不对啊,Windows不是出了一种新的格式叫APPX吗?不是号称这种格式跨平台吗?好吧,让我们来揭开APPX文件格式的神秘面纱:

APPX在维基百科(APPX)上的解释如下:

APPX is the file format used to distribute and install application software and middleware for Windows Store apps applications in Windows 8 and beyond.[1] It also replaces the XAP file format on Windows Phone, from version 8.1, in an attempt to unify the distribution of applications for Windows Phone and Windows 8.[2]

其中侧栏特意标注了一下:

Type of format: Package management system, file archive

明白了吗?APPX本质就是一个打包好的可执行文件的容器,这个容器里你放什么东西都行。还不相信?那我举例来证明,我刚到某手机论坛上下载了一个破解的WP应用,刚下载下来是这样的:

看我用7-zip把它解压:

果然有appx文件:

继续解压APPX:


看看这是什么啊:

APPX里解压开以后有一堆资源文件和一个EXE,还有几个DLL!

打开这个EXE看看真相吧:


居然连Dos Stub头都有。

注意在偏移量0x100的地方有个PE头的东西,0x104位置上是0x01C4,这是什么东西呢?在微软的SDK里是有解释的:
这个位置两个字节表示机器类型,而0x01c4也找到了解释:

0x01c4 - ARMv7 (or higher) Thumb mode only

这里有更多的机器类型的编码:windows - Check if exe is 64-bit

也就是说,其实EXE可执行文件(准确的说应该叫PE)是可以封装任何平台的机器码的,不管是ARM还是x86,根据SDK里的说法,实际上还可以支持MIPS、SH、PPC、alpha等。一个编译成ARM平台的EXE文件,运行在ARM手机上,完全没有问题

EXE是跟平台无关的,谁说EXE只能在x86上运行?

所谓能在ARM上运行的APPX,就是先用编译器把游戏重新编译一下,生成ARM平台的可执行文件,这个可执行文件再用APPX打包换个名字就OK了,但这个可执行文件根本不能在x86上跨平台运行:







说好的跨平台呢?




其实真正的跨平台是这样的,如果一个APPX想跨平台,开发者要同时编译ARM平台和x86平台两种目标文件,生成两个EXE,一个在ARM上跑,一个在x86上跑,然后把两个EXE同时打包到同一个APPX里。

于是这样就跨平台了。

其实就是发布两个不同的版本嘛。

APPX跨平台的格式:

这样APPX就可以同时在两个平台上使用了。

是不是很机智呢?


所以,大家可以洗洗睡了,根本不存在真正的跨平台。

---------------------补充---------------------

有人说安卓apk里也有native code,不能证明有native code就一定没有别的,问题是:

1、APPX里没别的东西,只有一个EXE文件,那么代码只能是在EXE文件里。
2、EXE的Header里标注的整个EXE是ARMv7的native code,那么请问如果有字节码,那么字节码放到什么地方?

下面还有一个截图,另一个APPX解压的效果:


请问字节码藏在哪里?

当然,我不排除ARM平台EXE里有某些section是字节码,但整体就是一个ARMv7的PE文件。

况且,C#反编译出来是这样的:


APPX里的EXE反编译出来是这样的:


别跟我说这是一种东西,别跟我说后面的那种也是字节码。

------------------一下内容写给不懂跨平台开发的同学------------------

跨平台开发并不是说有两套代码,代码实际上只有一套,编译的时候选择目标文件是多个平台即可。

也就是说,编译的时候费点时间,开发的时候并不怎么区分平台:


全选上就是了。

---------------------再补充---------------------

有人觉得这样会不会安装包变大?实际上大不了多少。

软件占地方的都是各种资源,真正的code部分其实很小,根据我解压的内容可以看到,EXE不是最大的,最大的都是各种资源,APPX做到code和资源分离,这样就够了。一个游戏上GB,大部分都是贴图、声音、视频这些东西。

Win10所谓的统一,更像是统一API,要知道在之前,并非所有API都是完全一样的,如果API不一样,跨平台想用一套代码基本不可能。

references:

http://www.zhihu.com/question/29642139

时间: 2024-10-10 11:00:42

windows 10是如何做到全平台统一的?的相关文章

【Xamarin 挖墙脚系列:Windows 10 一个包罗万象的系统平台】

build2016 结束后,证实了微软之前的各种传言.当然,都是好消息. Windows10 上基本可以运行主流的任意的操作系统. Windows Linux(在内部版本143216中,支持了bash,windows附着在乌班图Linux的子系统) Android IOS模拟器(一个远程桌面版本的需要MAC上安装部署Xcode) WindowsPhone模拟器 .... 以上是各种系统级别的. 当然VS2015各种支持主流开发语言也是一个亮点. Windows 10+vs2015 开发跨平台应用

Windows 10 发布:微软的回归与前进

“我们希望,所有Windows 7用户都能有这样的感觉:昨天他们还开着第一代普锐斯,而今天Windows 10就将让他们觉得像是开上了特斯拉.” 今天凌晨,微软发布了新一代操作系统 Windows 10,有趣的是,上一版的名称是 Windows 8,也就是说,实际上微软是跳过了 Windows 9.虽然从系统命名来看,似乎这个新系统发布是一次大跃进,但是从界面来讲,却是一次回归.香格里拉娱乐城 值得注意的是,从4英寸屏幕的“迷你”手机到10英寸的普通平板以及14英寸的笔记本.再到80英寸的巨屏电

Windows 10系统体验(版本号9926)组图

安装:本次安装在虚拟机下进行 整个安装过程,在最后的设置比较忙,大概20分钟 微软终于推出了下一代操作系统Windows 10.新的操作系统将统一所有Windows版本,将在2015年通过一个操作系统来接管包括电脑.手机和平板电脑等多种设备.下面让我们看看Windows 10操作系统究竟有哪些变化吧. Windows 10 全新的开始菜单 按住键盘上的Windows键,点击"Tab",就可以看到当前所有已经打开窗口的预览图,并且在桌面的底部通过不同的方式显示,上网看视频时CPU占用率也

微软Windows 10硬件新品发布会

微软用新一代硬件产品向外界展示了其在硬件设计生产方面的功力,丝毫不逊于任何硬件厂商,甚至用这些产品为其他第三方厂商制定了下一代设备的标准. 这些微软自家生产的硬件产品,无疑是展示Windows 10强大功能的最佳平台.无论是笔记本电脑.平板电脑.智能手机还是运动手环,实际上都是应用Windows10的平台,占领你的办公桌.客厅.卧室.健身房,甚至你的现实世界以外的想象空间. 发布会上首先公布了Windows 10的成绩,微软的最新一代操作系统Windows 10发布10周后,在全球已经有超过1.

不只是开始菜单回归 Windows 10全体验

北京时间2014年10月1日凌晨,微软就在旧金山召开新品发布会,对外展示了自己新一代操作系统Windows 10,覆盖了包括手机.平板.台式机以及Xbox One在内的所有平台.虽然微软此次发布的仅仅是技术预览版,但此时距离Windows 8发布仅仅过去了不到两年的时间. 一 份来自Net Applications给出的最新统计数据显示,Windows 7仍然是最受欢迎的操作系统,市场占有率为52.71%,超过了半数,这无疑也从侧面证明了Windows 8的失败.那么Windows 10能否成功

Windows 10环境安装VIM代码补全插件YouCompleteMe

Windows 10环境安装VIM代码补全插件YouCompleteMe 折腾一周也没搞定Windows下安装VIM代码补全插件YouCompleteMe,今天在家折腾一天总算搞定了.关键问题是在于Python环境:必须确保环境变量Path里只有一个python.exe. ycmd是client-server架构.ycmd本身是server,可以为多种客户端所用,如VIM/YouComplete,emacs/emacs-ycmd等.服务端有不同引擎,如clang补全c-familiy语言,其他引

【“10”力全开 游戏“Ti”厉害】ZX53VE-新飞行堡垒笔记本(Windows 10 Home/新七代标压i7-7700HQ/GTX 1050Ti 4G/8G内存/1TB+128GB)

[“10”力全开 游戏“Ti”厉害]ZX53VE-新飞行堡垒笔记本(Windows 10 Home/新七代标压i7-7700HQ/GTX 1050Ti 4G/8G内存/1TB+128GB) http://store.asus.com.cn/product-1416.html 销售价:                      (节省¥700.00) 市场价:         ¥7899.00 商品评分:         /////.....                      (共36人评

在Windows 10上清除和管理TPM (受信任的平台模块)

TPM(Trusted Platform Module,TPM),可信平台模块,是嵌入在您的计算机主板上的芯片,有助于实现防篡改全盘加密,而无需极长的复杂密码短语.这就是BitLocker在带有TPM芯片的计算机上通常工作得更好的原因.您仍然可以使用BitLocker加密没有TPM芯片的计算机上的整个磁盘,但每次打开时都会输入长密码. 此外,Windows 10广泛使用TPM并将其深入集成到Windows系统中以实现其安全增强功能,例如Device Guard和Windows Hello for

Windows 10 的音频和 MIDI API将统一

微软一统 Windows 10 的音频和 MIDI API 微软在夏季NAMM上的A3E大会上做了主题演讲,他们对Windows 10的音频和MIDI API都做了新的规划,开发者针对Windows 10开发的应用在手机.平板.桌面电脑.Raspberry Pi 2上也可以运行. 微软之前在音频方面一直是很低调,或者说没怎么关心过音频开发者们,这次Windows 10突然高调起来,在Windows 10里有很多针对音频和MIDI方面的改进: MIDI API:所有Windows 10设备都支持,