无法确定此文件的 Lua 格式
2020-5-15 21:16:27
收藏:0
阅读:231
评论:2
目前,我正在尝试阅读一个 Lua 文件,该文件以 .lua 结尾,但是当我打开它时,它似乎是一些奇怪格式的字节码。当前,唯一易读的字节码以 \ 27LuaQ 开始,没有次要代码和字节序等等。
Exception in thread "main" java.lang.IllegalStateException: The input chunk reports a non-standard lua format: 1
at unluac.parse.LHeaderType.parse_format(LHeaderType.java:87)
at unluac.parse.LHeaderType51.parse_main(LHeaderType.java:338)
at unluac.parse.LHeaderType.parse(LHeaderType.java:67)
at unluac.parse.BHeader.<init>(BHeader.java:84)
at unluac.Main.file_to_function(Main.java:116)
at unluac.Main.main(Main.java:58)
我花了几个小时来测试,赋予一个功能性字节码,以查看是否在编译时出错。然而,无论我做什么,所有反编译器都无法工作。我已经尝试过 unluac、chunkspy 和 luadec,它们的结果都是字节码标题格式不当。没有一个能反编译或分析。研究此文件,我发现对于字节码文件来说,有很多填充(0x00)被替换为 0x20,我认为这是 ' '。还要注意的是,该文件具有 LuaQ,这是我的一个错误,我忘了将其编辑回来。原先是 LupQ,我认为这可能是一项安全措施,但我不确定我是否正确。
目前,我的结论是,可能是我遗漏了一些重要和基础知识,任何信息都有所帮助。我已经包含了一个可以下载代码文件的链接。
该文件属于 Petroglyph 制作的老 PC 游戏:《星球大战:帝国战争》(2006 年),因此编译可能是使用的 Lua 5.1。 这是文件头,以及一些(136 位,在可辨识代码的第一部分截断):
1B4C 7561 5101 0404 0406 0809 0908 B609
9368 E7F5 7D41 0800 0000 3D28 6E6F 6E65
2900 0000 0000 0100 0000 0000 0002 0000
0000 0000 0000 0000 0000 0700 0000 0410
0000 0044
这是文件的链接(它在我的学生 Gmail 帐户上托管):pgdebug.lua
点赞
用户1847592
这段字节码几乎与 Lua 5.0 相同。
function DebugEventAlert(event, parameters)
message = tostring(Script)..": handled event "..tostring(event)
function AppendParameter(idx, val)
message = message.."\nParameter "..tostring(idx)..": "..tostring(val)
end
table.foreachi(parameters, AppendParameter)
MessageBox(message)
end
function MessageBox(t)
_MessagePopup(string.format(unpack(t)))
end
function ScriptMessage(t)
_ScriptMessage(string.format(unpack(t)))
end
function DebugMessage(t)
_ScriptMessage(string.format(unpack(t)))
end
function OutputDebug(t)
_OuputDebug(string.format(unpack(t)))
end
function ScriptError(t)
outstr = string.format(unpack(t))
_OuputDebug(outstr.."\n")
_ScriptMessage(outstr)
outstr = DumpCallStack()
_OuputDebug(outstr.."\n")
_ScriptMessage(outstr)
ScriptExit()
end
function DebugPrintTable(t)
DebugMessage("%s -- unit table contents:", tostring(Script))
for unit in pairs(t) do
DebugMessage("%s -- \t\t** unit:%s", tostring(Script), tostring(unit))
end
end
2020-05-15 21:23:59
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

Petrolution Mod-Tools称:
看起来,unluac,虽然主要针对Lua 5.1,但也大部分适用于Lua 5.0。您将不得不对其进行轻微修改,以考虑这三个差异,或在运行unluac之前编辑文件以撤消这些更改。
此外,Petrolution还拥有一些工具看起来至少可以完成您正在尝试完成的一些任务。