通过 string.dump 检索的 Lua 字节码我能得到些什么?

我正在使用 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)是否可以将其恢复到完整代码,如果不能,是否可以获取反汇编列表?

点赞
用户1442917
用户1442917

“是的” 对于所有问题都是肯定的,但还有一些注意事项。 对于(1),请确保在Windows上在io.open 的 “mode” 参数的一部分使用“b”,因为 string.dump 的输出将包含一些二进制内容。 对于(2),只有在使用不带 strip 选项的 string.dump 时才成立,此选项在LuaJIT中添加

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); 它还包括一个有关完整和剥离的字节码之间的差异的部分,这可能会回答一些你的问题。

2018-12-30 17:26:28