注意: 不同系统数值大小会有所不同, 格式仅供参考
数据来源:《自己动手实现Lua:虚拟机、编译器和标准库》张秀宏 2018-9-27
demo.lua 生成的二进制 chunk 文件
--demo.lua
print("Hello World")
1B 4C 75 61 53 00 19 93 0D 0A 1A 0A 04 04 04 08
08 78 56 00 00 00 00 00 00 00 00 00 00 00 28 77
40 01 0A 40 64 65 6D 6F 2E 6C 75 61 00 00 00 00
00 00 00 00 00 01 02 04 00 00 00 06 00 40 00 41
40 00 00 24 40 00 01 26 00 80 00 02 00 00 00 04
06 70 72 69 6E 74 04 0D 48 65 6C 6C 6F 20 57 6F
72 6C 64 21 01 00 00 00 01 00 00 00 00 00 04 00
00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00
00 00 00 00 00 00 01 00 00 00 05 5F 45 4E 56
1B 4C 75 61
"\x1bLua" 用于识别文件格式
53
版本号
00
标准格式
19 93 0D 0A 1A 0A
用于校验的数据块
04 04 04 08 08
分别表示:
int 类型大小
size_t 类型大小
Lua 指令大小
Lua 整数大小
Lua 浮点数大小
78 56 00 00 00 00 00 00
Lua 整数 0x5678
00 00 00 00 00 28 77 40
Lua 浮点数 370.5
01
upvalue 大小
0A 40 64 65 6D 6F 2E 6C 75 61
文件名, @demo.lua
00 00 00 00
第一行
00 00 00 00
最后一行
00
固定参数个数
01
是否有变长参数: 1有, 0没有
02
寄存器数量
04 00 00 00
指令条数
06 00 40 00
41 40 00 00
24 40 00 01
26 00 80 00
指令
02 00 00 00
常量个数
04 06 70 72 69 6E 74
printf
04 0D 48 65 6C 6C 6F 20 57 6F 72 6C 64 21
Hello World!
01 00 00 00 01 00
Upvalue 表
00 00 00 00
子函数原型表
04 00 00 00
行号
01 00 00 00
01 00 00 00
01 00 00 00
01 00 00 00
对应行号
00 00 00 00
局部变量表
01 00 00 00
upvalue 个数
05 5F 45 4E 56
_ENV