当前位置:首页 > Windows程序 > 正文

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

2021-05-24 Windows程序

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

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70569.html