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

问题描述 投票:0回答:3

我一直在研究如何将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专家,因此我需要一些建议。

这可行吗?还是有其他方法可以做到这一点?

c++ actionscript-3 flash haxe flascc
3个回答
0
投票

一般来说,不。将Flash自动编译为二进制文件将是一件非常复杂的事情,并且也是无效的。

我很惊讶您使用的第一种方法实际可行,我希望生成的代码在这里和那里随机失败。无论如何,3-> haxe编译可以有效地提高代码性能,这是不可能的。

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

将ABC编译为LLVM,然后编译为二进制文件似乎更加可行和可行,但是需要大量的精力,但是我再次怀疑结果是否会很快。而且我几乎可以肯定,它将比在目标平台上的Flash Player中运行的swf慢得多。 (但是,考虑到您已经完成的工作,我估计您将能够在2到3个月的辛苦工作中制作出原型,因此值得一试。)


0
投票

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

要做的工作是,将SWF文件分解为Keil可编译的C / C ++源文件。

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

  1. 从ABC到TESSA(类型丰富的SSA)Tamarin on LLVM
  2. TESSA到LLVM IR
  3. LLVM IR to C(By llc)

我将尝试一下!


0
投票

尝试此应用:https://sourceforge.net/projects/transform-cxx/这个程序很有用。应用程序自己编码,您没有代码]

© www.soinside.com 2019 - 2024. All rights reserved.