美文网首页
反编译chunk

反编译chunk

作者: APP4x | 来源:发表于2020-09-10 23:57 被阅读0次
    本文借鉴《自己动手实现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
    

    相关文章

      网友评论

          本文标题:反编译chunk

          本文链接:https://www.haomeiwen.com/subject/hqmosktx.html