我一直在研究将 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 可编译的二进制代码似乎是一项非常低效的工作。
最近,我通过 Adobe Flash C++ 编译器找到了另一种可能的解决方案,即 FlasCC(一个完整的类似 BSD 的 C/C++ 开发环境,具有基于 GCC 的交叉编译器,能够针对 Adobe 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 专家,因此我需要一些建议。
这可行吗?或者有没有其他方法可以做到这一点?