我一直在尝试反编译 Lua 字节码,并发现了一些有用的工具,如 unluac 和 LuaAssemblyTools。Unluac 似乎可以用 luac 编译的 lua 脚本来解决这个问题,给我几乎准确的源代码,但是当我使用以下代码将 lua 脚本转换为字节码时:
file:write(string.dump(loadfile(filename)))
我得到的输出与 luac 不同,但是它们非常相似,只是在(很多)不同的地方多出了一个字节。现在这个新文件会给我一个IllegalState exception
from unluac 并且当我尝试使用 -l 选项在 luac 中运行字节码文件(由上面的代码行创建)时,我得到:
C:\MyDir>luac -l stringdumped.txt
luac: stringdumped.txt: bad integer in precompiled chunk
因此,有明显的差异string.dump
和luac,即使它是在这里建议:http://lua-users.org/wiki/LuaCompilerInLua以使用string.dump
为luac的仿真器。
任何人都可以向我解释其中的区别,并建议我将如何反转string.dump
“已编译”脚本?