我正在使用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)是否可以将其还原为完整的代码,否则,是否可以获得反汇编的清单?
答案 0 :(得分:1)
对所有问题的“是”,但有几点警告。对于(1),请确保在Windows的io.open
中将“ b”用作“ mode”参数的一部分,因为string.dump
的输出将包含一些二进制内容。对于(2),只有在不使用added in LuaJIT的string.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);它还包括一节完整字节和剥离字节码之间的差异,可以回答您的某些问题。