反编译chunk

本文借鉴《自己动手实现Lua:虚拟机、编译器和标准库》,算是对自己学习的总结,也希望分享下所学知识~~

二进制chunk之所以使用二进制格式,是为了方便虚拟机加载,然后对人类很不友好

那咋办呢?
luac -l 可以切换到反编译模式

$lua -l hello_world.luac
main <hello_world.lua:0,0>(4 intructions at 0x7fc43fc02e40)
    0+ param, 2 slots, 1 upvalue, 0 locals, 2 constant, 0 functions
        1  [1]GETTABUP  0  0-1  ;  _ENV  "print"
        2  [1]LOADK  1-2  ;  "Hello, World!";
        3  [1]CALL  0  2  1
        4  [1]RETURN  0  1

因为没有函数定义,所以回生成一个main函数
如果lua程序里有函数定义,那么luac反编译器会按顺序依次输出这些函数原型的信息

信息说明:
1.前两行是函数的基本信息,后面是指令列表
a.如果是main开头,是编辑器声明的主函数;如果是以function开头的,说明这是一个普通函数。
b.接着是定义函数的源文件名和函数在文件的起止行号(对于main函数,起止行号都是0),然后是指令数和函数地址。
c.第二行依次是:函数的固定参数数量(如果有+号,表示这是一个vararg*[可变参数]*)、运行函数所必要的寄存器数量,upvalue数量,局部变量数量、常亮数量,子函数数量。
2.指令列表的每一条指令都包含指令序号、对应行号、操作码和操作数(分号后面是luac根据指令操作数生成的注释)


PS:如果想看详细的输出,可以使用两个 -l

$lua -l -l hello_world.luac
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值