无法确定此文件的Lua格式

问题描述 投票:1回答:1

[当前,我正在尝试读取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,我认为这可能是一种安全措施,但不能100%确信我对此是正确的。

[目前,我得出的结论是,可能我错过了重要的基础知识,任何信息都可以帮助我。我提供了一个链接,您可以从该链接下载代码文件。

[该文件属于《星球大战:战争帝国》,这是Petroglyph于2006年开发的旧PC游戏,因此很可能是使用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

lua compiler-errors bytecode
1个回答
0
投票

Petrolution Mod-Tools这样说:

此格式在《帝国战争与腐败力量》中使用。

除了三个区别之外,每个岩画文字Lua对象文件基本上都是普通的Lua 5.0 object file

  • Lua 5.0目标文件的签名为“ \ 033Lua”。对于Petroglyph的Lua目标文件,这是“ \ 033Lup”
  • 指示Lua 5.0目标文件的文件版本为0x50的字节。刻在岩石上的文字的Lua对象文件使用0x51(尽管它实际上是一个5.0文件)。
  • 在每个函数头中,Petroglyph的Lua对象文件在“ lineDefined”整数之后紧跟一个附加整数,可以忽略。

对于文件中的第一个函数,附加整数似乎从1开始,然后对于其他每个函数,附加整数都增加一个,而忽略函数嵌套。据推测,该整数用于保存游戏期间的持久Lua状态。

看起来像unluac,虽然主要用于Lua 5.1,但大多数情况下也适用于Lua 5.0。不过,您必须对其稍作修改以解决这三个差异。

Petrolution也有some tools,看起来它们可以完成您要尝试做的某些事情,而无需进行任何修改。

© www.soinside.com 2019 - 2024. All rights reserved.