我可以从通过string.dump检索的lua字节码中得到什么?

时间:2018-12-30 16:37:34

标签: lua luajit

我正在使用lua + luajit 2.0.4,我想知道-是否可以从lua函数转储中恢复代码的原始部分? function a(l) if l > 3 then print(l*l) end end local b = string.dump(a) 在此示例中,我正在执行'a'函数的string.dump,在这里我遇到了类似的问题: 1)是否可以将此转储写入.txt文件? 2)是否可以获取函数,变量,升值的原始名称? 3)是否可以获取字符串,数字,表格? 4)是否可以将其还原为完整的代码,否则,是否可以获得反汇编的清单?

1 个答案:

答案 0 :(得分:1)

对所有问题的“是”,但有几点警告。对于(1),请确保在Windows的io.open中将“ b”用作“ mode”参数的一部分,因为string.dump的输出将包含一些二进制内容。对于(2),只有在不使用added in LuaJITstring.dump选项的情况下使用strip的情况下才成立:

  

string.dump(f [,strip])

     

一个额外的参数已经添加到string.dump()中。如果设置为true,   生成没有调试信息的“剥离”字节码。这个   加快以后字节码的加载速度并减少内存使用。

对于(4),我发现该文档非常有用:http://files.catwell.info/misc/mirror/lua-5.2-bytecode-vm-dirk-laurie/lua52vm.html(适用于Lua 5.2,但大多数内容也适用于LuaJIT);它还包括一节完整字节和剥离字节码之间的差异,可以回答您的某些问题。