二进制chunk主要分为两部分:
可以使用 xxd 命令观察一下 luac 文件
1.头部
头部共占用30个子节(因平台而异)
其中包含:
a.签名
很多二进制格式都会以固定的魔数开始(Magic Number)开始
(Java的class文件,魔数是四字节0xCAFEBABC)
Lua二进制chunk的魔数(也叫做签名,Signature)也是四个字节码,分别是 ESC、L、u、a 的ASCII码
十六进制表示是0x1B4C7561,字符串就是\x1bLua
其主要作用就是快速识别文件格式的作用
当Lua虚拟机试图加载一个chunk文件,发现其不是以这个开头的,就会拒绝加载文件
b.版本号
签名之后的一个字节,记录二进制chunk文件所对应的Lua版本号
有三个部分构成:
c.格式号
版本号之后的一个子节记录二进制chunk格式号
Lua加载二进制chunk时,也会检查格式号
如果和虚拟机本身的格式号不匹配,就拒绝加载该文件
Lua官方使用的格式号是 0
d.LUAC_DATA
格式号之后的六个字节在Lua官方实现里叫LUAC_DATA
其中前两个字是0x1993,这是Lua 1.0发布的年份
后四个子节依次是:回车符(0x0D)、换行符(0x0A)、替换符(0x1A)和另一个换行符
同样也是校验的作用,如果虚拟机加载二进制chunk时发现这六个字节不一样,就会认为文件损坏,拒绝加载
e.整数和Lua虚拟机指令宽度
接下来的几个数分别记录 cint、size_t、Lua虚拟机指令、Lua整数和Lua浮点数这五种数据类型,在而微软禁止chunk里占用的字节数。
同样也会检查这五种数据所占用的字节数,如果和期望数值不匹配则拒绝加载
f.LUAC_INT
解析来的n个子节存放 Lua 整数值 0x5678
是为了检验二进制 chunk 的大小端方式,Lua 会用虚拟机在加载二进制 chunk 时,会利用这个数据检查其大小端方式和本机是否匹配,如果不匹配就会拒绝记载
g.LUAC_NUM
头部的最后 n 个子节存放 Lua 浮点数 370.5
同样是为了检测二进制 chunk 所使用的浮点数格式,如果不匹配就拒绝加载
(主流平台和语言一般都采用 IEEE 754 浮点数格式)
apk文件可以简单的通过压缩软件进行打开,打开后有如下目录:1.assets(文件夹,内部可能有文件夹,这里也有资源、配置文件)2.res(文件夹,resource的缩写,存放图片等数据,图片解压出来后可直接查看)可能出现目录:①.anim(文件夹,存放动画资源,未反编译情况下为乱码)②.xml(文件夹,存放的xml文件,未反编译情况下为乱码)③.raw(文件夹,存放资源文件)3.classes.dex(文件,很重要的文件,可通过dex2jar.bat将其转换为jar再通过jd-gui查看)4.META-INF(文件夹,存放系统签名文件)5.resources.arsc(文件,编译后的二进制资源文件的索引,用处不大,涉及汉化时考虑的文件)6.lib(文件夹)①.armeabi(子目录,存放的是一些so文件)7.AndroidManifest.xml(xml文件,描述了应用的名字、版本、权限、引用的库文件等信息)pak文件是一种少见的压缩文件,pak是一种少见的压缩文件格式,是pakQuake系列游戏所采用的一种特殊压缩包格式,由Quake游戏公司开发,一般用户无法打开。简单来说pak是一种少见的压缩文件格式;可以将多个文件压缩成一个文件,例如RAR将多个文件压缩成1个RAR文件。现在好多游戏的客户端(如比较有名的植物大战僵尸等)都采用这种特殊的压缩包格式,以利于游戏的开发。由于是针对于游戏的设计和使用而采用的文件结构,所以与一般的压缩文件格式有所不同。
第一步安装插件 compression-webpack-plugin
npm install --save-dev compression-webpack-plugin
第二步修改vue.config.js配置文件
第三步修改nginx配置
最后看下效果
到此结束!如果遇到安装插件后 npm run build 报错 就行将插件版本降低 插件版本过高的原因 我用的是5.1.1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)