如何将Flash SWF文件交叉编译成Keil可编译的C/ c++文件

How to cross compile Flash SWF file(s) into Keil Compilable C/C++ file(s)

本文关键字:文件 编译 c++ Keil Flash SWF 交叉编译      更新时间:2023-10-16

我一直在研究将flash SWF文件交叉编译成C/c++源文件有很多工具可以将SWF文件反编译为纯文本文件格式。免费的SWF反编译器提供了大量的开源解决方案。

将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 Runtime)

但我不确定它是否会像我预期的那样起作用。

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

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

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

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

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

这样,ActionScript字节码可以通过LLVM LTO(Link Time optimized) Build

进行优化。

因为我不是真正的虚拟机专家,所以我需要一些建议。

这可行吗?或者还有别的办法吗?

一般来说,没有。将flash自动编译成二进制文件将是一件非常复杂的事情,也是一件效率低下的事情。

我很惊讶你使用的第一种方法实际上是有效的,我期望结果代码在这里和那里随机失败。无论如何,在生成的代码性能方面,3->haxe编译是不可能有效的。

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

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

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

任务是将SWF文件分解为可编译的C/c++源文件。

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

  1. ABC对LLVM上TESSA (Type富集SSA)绢毛猴的影响
  2. TESSA to LLVM IR
  3. LLVM IR to C (By llc)

我要试试!