首页 > 解决方案 > 使用 luac 和 string.dump() 创建的 lua 5.1 字节码有区别吗?

问题描述

如果是这样,有没有办法在两者之间进行转换?

我正在尝试将一些由 string.dump 创建的字节码加载到一个名为 unluac 的程序中,但是它不起作用。

如果对任何人有帮助,以下是我尝试反编译的字节:

\27\76\80\72\1\0\0\0\146\10\2\0\161\10\2\0\9\0\0\0\21\0\0\0\228\11\200\0\130\90\116\0\224\159\228\0\152\117\220\0\228\11\200\0\126\238\144\0\228\11\200\0\130\90\116\0\42\128\222\0\122\130\173\0\158\151\177\0\194\172\181\0\6\107\218\0\240\79\114\0\78\149\226\0\90\217\140\0\224\159\228\0\84\183\183\0\224\159\228\0\86\109\169\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\21\0\0\0\228\11\200\0\130\90\116\0\224\159\228\0\152\117\220\0\228\11\200\0\126\238\144\0\228\11\200\0\130\90\116\0\42\128\222\0\122\130\173\0\158\151\177\0\194\172\181\0\6\107\218\0\240\79\114\0\78\149\226\0\90\217\140\0\224\159\228\0\84\183\183\0\224\159\228\0\86\109\169\0\0\0\0\0\1\0\0\0\1\0\0\0\8\0\0\0\21\0\0\0\188\138\224\0\14\67\161\0\90\217\140\0\94\69\112\0\12\141\175\0\58\48\108\0\22\27\104\0\194\172\181\0\114\170\230\0\40\202\236\0\22\27\104\0\78\149\226\0\58\48\108\0\234\45\157\0\194\172\181\0\190\64\210\0\122\130\173\0\6\107\218\0\224\159\228\0\150\191\234\0\0\0\0\0\0\0\0\0\2\0\0\0\1\0\0\0\36\0\0\0\21\0\0\0\188\138\224\0\14\67\161\0\90\217\140\0\94\69\112\0\12\141\175\0\58\48\108\0\22\27\104\0\194\172\181\0\114\170\230\0\40\202\236\0\22\27\104\0\78\149\226\0\58\48\108\0\234\45\157\0\194\172\181\0\190\64\210\0\122\130\173\0\6\107\218\0\224\159\228\0\150\191\234\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\123\10\2\0\4\0\0\0\6\0\0\0\224\159\228\0\4\181\232\0\226\85\214\0\188\138\224\0\40\202\236\0\0\0\0\0\3\0\0\0\154\153\153\153\153\153\27\192\0\0\0\0\0\0\0\0

标签: luabytecode

解决方案


没有区别。两种情况最后都会使用相同luaU_dump()的。

请注意,尽管 Lua 在字节码块头中保存了某些本机类型的大小。其中一个字段是 type size_t,这使得字节码不仅在具有不同字节顺序的主机之间不兼容,而且在 32 位和 64 位系统之间也不兼容。

简而言之 - 您必须使用与解释器相同版本的 Lua 编译器 (luac),并针对将运行解释器的完全相同的平台进行编译。即,您不能使用 64 位 luac 来生成由 Lua VM 在 32 位程序中运行的字节码。


推荐阅读