数据类型
对于需要使用超过一个字节表示的数据,要考虑大小端的问题
数字
字节
C语言整形叫作cint
C语言size_t,叫作size_t
Lua整形
Lua浮点型
固定长度储存
除字节类型外,都会占用对个字节
字符串
实质,是一个字节数组
字节数组的长度也记录在二进制chunk中
短字符串
长字符串
nulll
列表
cint记录列表的长度
紧接着储存N个列表元素
头部
把主函数编译成函数原型后,会给它添加一个header,然后dump成一个luac.out文件
签名
很多二进制格式都会以固定魔数开始
四个字节
ESC
L U A 的ASCII码
魔数主要起到快速识别文件格式的作用
可以用 xxd命令观察
如果签名不对,就会拒绝加载该文件
版本号
签名之后的一个字节
大版本号
小版本号
如果版本号与虚拟机本身的版本号不一致,就拒绝加载该文件
5.3.4这个版本号如何记录在chunk文件中
5x16+3
格式号
版本号之后的一个字节
如果和虚拟机本身的格式号不匹配,就决绝加载该文件
lua 官方现在使用的格式号是 0
LUAC_DATA
格式号之后的6个字节
Lua 1.0 发布的年份
回车符
换行符
替换符
另一个换行符
各种整数类型占用的字节数
LUAC_DATA 之后的5个字节
也记录了Lua指令占用的字节数
大小端识别信息
如果大小端方式与本机不匹配,则拒绝加载
浮点数识别信息
如果浮点数格式与本机不匹配,则拒绝加载