我有一堆代表游戏中 UI 的 SWF 文件。它们中的大多数都包含 DoABC 标签,但是标签类型300不是82.
抛开这个麻烦,我根据官方的AVM2概述开始解析标签,发现结构有多个其他问题:
- 对于大多数方法
flag值包含标志0x01和0x04(NEED_ARGUMENTS和NEED_REST) 根据文档不能一起使用。 - 出于某种原因
option_info.option_count总是大于param_count。 - 如果我要忽略第 2 点并无论如何解析参数 - 大多数情况下的参数类型是不正确的(第 26 页)
这是示例字节码。0x2F表示方法计数。根据文档解析,在 0x12 处,您可以看到有 5 个参数,而 0x1b 告诉我们其中 7 个是可选的,这完全是无稽之谈,因为
[...] 可选参数的数量由 option_count 给出,它不能为零或大于 parameter_count [...]
我的猜测是300标签表示自定义标签,因此可以应用自定义解析规则,对于其他点,我会说字段的顺序发生了变化,并且标志以及参数计数和选项信息处于不同的偏移量。但是我怎么能确定某种解析方式是正确的呢?我不熟悉 ActionScript,也不知道方法名称、参数名称或参数类型是否有意义。
如果我们以上面的例子为例,根据文档解析它会导致0x01名为flash.events( 0x03)的第一个方法(地址)有 0 个参数(0x01),返回类型为fl.transitions.easing.Back(0x02)和标志0x05(0x04)
