parse luac: Error
weituotian opened this issue · 8 comments
parse luac: Error(
Stack {
base: Base {
location: 50,
kind: Kind(
Switch,
),
},
contexts: [
(
50,
Kind(
Count,
),
),
(
46,
Context(
"count instruction",
),
),
(
46,
Context(
"chunk",
),
),
],
},
)
luac文件:
Post_G3_Co_Fog.zip
我研究了一下,发现不是官方的lua字节码格式,luac部分代码应该是被人为修改过的
将 https://github.com/metaworm/luac-parser-rs/blob/master/src/lib.rs#L276 处的代码修改为
map(
tuple((
tag(b"\x53"),
be_u8,
take(6usize), // LUAC_DATA
// be_u8,
be_u8,
be_u8,
be_u8,
be_u8,
complete::le_i64,
complete::le_f64,
be_u8,
)),
|(
_,
format_version,
_luac_data,
// int_size,
size_t_size,
instruction_size,
_integer_size, // lua_Integer
number_size,
_,
_,
_,
)| LuaHeader {
lua_version: LUA53,
format_version,
big_endian: cfg!(target_endian = "big"),
int_size: 4,
size_t_size,
instruction_size,
number_size,
number_integral: false,
..Default::default()
},
),
可以解析
不确定其他地方有没有动过手脚,需要你自行判断
@metaworm 是一个游戏提取的luac, 我尝试用修改这个仓库https://github.com/metaworm/openwrt-luac-parser
来编译wasm,但是好像没有 take(6usize), // LUAC_DATA
这个函数,我应该怎么处理
已经成功编译了,但是在使用https://luadec.metaworm.site/
时会报另一个错误
custom parser: RuntimeError: unreachable
这是我的wasm和luac文件
Z.zip
@weituotian parser的源代码发我看一下 metaworm@outlook.com
已发送
收到了,我本地编译出来的wasm加载使用是没有问题的,也通过邮件发给你了;
另外你提供的luac的字节码指令是被修改过的,有些opcode超出了正常的范围,反编译结果中显示为-- todo: Invalid
;
要想达到最好的反编译效果,需要你逆向分析出他的opcode和官方opcode的映射关系,并在parser的指令解析部分中还原成官方的opcode,可以参考 openwrt-luac-parser 项目中 custom.rs 文件中相关代码的处理
收到,我再去研究一下opcode的原理