chunk总体结构(头部)

chunk总体结构(头部),第1张

二进制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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7948540.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存