我一直在研究如何将Flash SWF文件交叉编译为C / C ++源文件。有很多工具可以将SWF文件反编译为纯文本文件格式。Free SWF Decompiler为此提供了很多开源解决方案。
要将SWF反编译为C / C ++源文件,我尝试了以下解决方案
1] Haxe:Haxe编译器负责将Haxe编程语言转换为目标平台本机源代码或二进制代码
为此,我需要
a)将SWF反编译为动作脚本文件
b)将动作脚本转换为Haxe语言脚本
c)编译成C ++源文件
d)使用Keil MDK-ARM重新编译C ++源文件
缺点:输出的C ++文件很大,并且包含许多Flex SDK,例如C源格式的资源,很难在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(链接时间优化)构建来优化ActionScript字节码
由于我不是llvm专家,因此我需要一些建议。
这可行吗?还是有其他方法可以做到这一点?
一般来说,不。将Flash自动编译为二进制文件将是一件非常复杂的事情,并且也是无效的。
我很惊讶您使用的第一种方法实际可行,我希望生成的代码在这里和那里随机失败。无论如何,3-> haxe编译可以有效地提高代码性能,这是不可能的。
至于第二种方法,编译器是单向的,不能使用FlasCC来反编译ABC字节码,也不能编译as3,它只能用于将c / c ++编译为ABC。
将ABC编译为LLVM,然后编译为二进制文件似乎更加可行和可行,但是需要大量的精力,但是我再次怀疑结果是否会很快。而且我几乎可以肯定,它将比在目标平台上的Flash Player中运行的swf慢得多。 (但是,考虑到您已经完成的工作,我估计您将能够在2到3个月的辛苦工作中制作出原型,因此值得一试。)
对我来说,现在分解整个工作似乎更加清楚。
要做的工作是,将SWF文件分解为Keil可编译的C / C ++源文件。
我找到了一个旨在转换的开源解决方案
我将尝试一下!
尝试此应用:https://sourceforge.net/projects/transform-cxx/这个程序很有用。应用程序自己编码,您没有代码]