luac和string.dump()所创建的lua5.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
点赞
用户5675002
用户5675002

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

但要注意,Lua在字节码块头中保存了一些本机类型的大小。其中之一的字段类型为 size_t,这使得字节码在具有不同字节序的主机之间不兼容,也使得字节码在32位和64位系统之间不兼容。

简而言之 - 您必须使用与解释器相同版本的Lua编译器(luac),并且编译器必须编译为与将运行解释器的完全相同的平台。也就是说,您不能使用64位luac来生成由32位程序内的Lua VM运行的字节码。

2018-09-18 07:56:53