0

我一直在研究将 Flash SWF 文件交叉编译成 C/C++ 源文件有很多工具可以将 SWF 文件反编译成纯文本文件格式。Free SWF Decompiler在这方面提供了大量的开源解决方案。

要将 SWF 反编译为 C/C++ 源文件,我尝试了以下解决方案

1)Haxe:Haxe编译器负责将Haxe编程语言翻译成目标平台原生源代码或二进制

为此,我需要

a) 将 SWF 反编译为 actionscripts 文件

b) 将动作脚本转换为 Haxe 语言脚本

c) 编译器 haxe 到 C++ 源文件

d) 使用 Keil MDK-ARM 重新编译 C++ 源文件

缺点:输出的 C++ 文件很大,包含许多 C 源格式的类似 Flex SDK 的资源,很难在 Keil MDK-ARM 中重新编译。获取 Keil 可编译的二进制代码似乎是一项非常低效的工作。

最近,我通过 Adob​​e Flash C++ 编译器找到了另一种可能的解决方案,即 FlasCC(一个完整的类似 BSD 的 C/C++ 开发环境,具有基于 GCC 的交叉编译器,能够针对 Adob​​e Flash 运行时)

但我不确定它是否会按我的预期工作。

由于 FlasCC 可以将 c/c++ 代码编译为 ActionScript 字节码 (ABC) 以及 LLVM 字节码。我的想法是

a) 解析 SWF ActionScript 字节码 (ABC)

b) 在 FlahCC 中读取 ActionScript 字节码 (ABC)(不确定是否可以这样做?)

c) 通过 FlasCC 中等效的 ActionScript 字节码 (ABC),输出其 LLVM 字节码(不确定是否可以这样做?)

d) LLC 将 LLVM 字节码转换为 C++ 代码

这样就可以通过 LLVM LTO(Link Time Optimized) Build 优化 ActionScript 字节码

由于我不是 llvm 专家,因此我需要一些建议。

这可行吗?或者有没有其他方法可以做到这一点?

4

2 回答 2

0

我现在似乎更清楚分解整个工作了。

待办事项是将 SWF 文件分解为 Keil 可编译的 C/C++ 源文件。

我找到了一个旨在转换的开源解决方案

  1. LLVM 上的ABC 到 TESSA(类型丰富的 SSA)Tamarin
  2. TESSA 到 LLVM IR
  3. LLVM IR 到 C(由 llc 提供)

我会试一下!

于 2014-07-22T03:47:31.527 回答
0

一般来说,没有。将闪存自动编译为二进制文件将是一件非常复杂且无效的事情。

我很惊讶您使用的第一种方法实际上有效,我希望生成的代码在这里和那里随机失败。无论如何,as3->haxe 编译在最终的代码性能方面没有任何机会有效。

至于第二种方法,编译器是单向的,不能用FlasCC反编译ABC字节码,也不能编译as3,只能用c/c++编译成ABC。

将 ABC 编译为 LLVM,然后编译为二进制文件似乎更加可行和可行,但需要付出相当多的努力,而且我再次怀疑结果会不会很快。而且我几乎可以肯定它会比在目标平台上的 Flash 播放器中运行的 swf 慢得多。(然而,考虑到你已经做过的事情,我估计你将能够在 2 或 3 个月的艰苦工作中制作出原型,因此值得一试。)

于 2014-07-18T18:05:57.597 回答