我一直在研究如何将flash SWF文件交叉编译成C/C++源文件,有很多工具可以将SWF文件反编译成纯文本文件格式。Free SWF Decompiler在这方面提供了大量的开源解决方案。
为了将SWF反编译成C/C++源文件,我尝试了以下解决方案
1) Haxe:Haxe编译器负责将Haxe编程语言翻译成目标平台本机源代码或二进制代码
为此,我需要
a)将SWF反编译成actionscripts文件
b)将actionscript转换为Haxe语言脚本
c)将haxe编译成C++源文件
d)使用Keil MDK-ARM重新编译C++源文件
缺点:输出的C++文件很大,包含许多类似Flex SDK的C源代码格式的资源,很难在Keil MDK-ARM中重新编译。而且,获取Keil可编译的二进制代码似乎是一项非常低效的工作。
最近,我发现了Adobe Flash Runtime编译器的另一个可能的解决方案,即FlasCC (一个完整的类似C++的C/C++开发环境,带有一个基于GCC的交叉编译器,能够针对Adobe Flash Runtime)。
但我不确定它是否会像我预期的那样工作。
因为FlasCC可以将c/c++代码编译成ActionScript字节码和LLVM字节码。我的想法是
a)解析SWF ActionScript字节码(ABC)
b)在FlahCC中读取ActionScript字节码(ABC) (不确定是否可以做到?)
c)通过FlasCC中等效的ActionScript字节码(ABC),输出它的LLVM字节码(不确定这是否可以做到?)
d)通过有限责任公司将LLVM字节码转换为C++代码
通过这种方式,ActionScript字节码可以通过LLVM LTO(链接时间优化)构建进行优化
由于我不是llvm专家,我需要一些建议。
这可行吗?或者,有没有其他方法可以做到这一点?
发布于 2014-07-19 02:05:58
一般来说,不是。自动编译闪存到二进制将是相当复杂的事情,也是无效的。
我很惊讶你使用的第一种方法实际上是有效的,我预计结果代码会随机地在这里和那里失败。无论如何,3->haxe编译在最终代码性能方面是有效的,这是不可能的。
至于第二种方法,编译器是单向的,你不能使用FlasCC来反编译ABC字节码,也不能编译as3,它只能用来将c/c++编译成ABC。
将ABC编译成LLVM,然后编译成二进制似乎更可行,但需要相当多的努力,我再次怀疑结果是否会很快。我几乎可以肯定,它会比在目标平台上的flash播放器中运行的swf慢得多。(然而,考虑到你已经完成的事情,我估计你将能够在2到3个月的艰苦工作中做出一个原型,所以它可能值得一试。)
发布于 2014-07-22 11:47:32
对我来说,现在分解整个工作似乎要清楚得多。
任务是,将SWF文件分解成Keil可编译的C/C++源文件。
我发现了一个开源的解决方案,它的设计目的是将
我会试一试!
https://stackoverflow.com/questions/24777947
复制相似问题