【问题标题】:How to cross compile Flash SWF file(s) into Keil Compilable C/C++ file(s)如何将 Flash SWF 文件交叉编译为 Keil Compilable C/C++ 文件
【发布时间】:2014-07-16 10:04:19
【问题描述】:

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

要将 SWF 反编译为 C/C++ 源文件, 我尝试了以下解决方案

1)Haxe:Haxe 编译器负责将 Haxe 编程语言翻译成目标平台原生源代码或二进制文件

为此,我需要

a) 将 SWF 反编译为 actionscripts 文件

b) 将动作脚本转换为 Haxe 语言脚本

c) 编译成 C++ 源文件

d) 使用 Keil MDK-ARM 重新编译 C++ 源文件

缺点:输出的 C++ 文件很大,包含许多 C 源格式的类似 Flex SDK 的资源,在 Keil MDK-ARM 中很难重新编译。而且获取 Keil 可编译的二进制代码似乎是一项非常低效的工作。

最近,我通过 Adob​​e Flash C++ 编译器找到了另一种可能的解决方案,即 FlasCC ( 一个完整的类似 BSD 的 C/C++ 开发环境,带有基于 GCC 的交叉编译器,能够以 Adob​​e 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 专家,因此我需要一些建议。

这可行吗?或者有没有其他方法可以做到这一点?

【问题讨论】:

    标签: c++ actionscript-3 flash haxe flascc


    【解决方案1】:

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

    我很惊讶您使用的第一种方法实际上奏效了,我预计生成的代码会在这里和那里随机失败。无论如何,as3->haxe 编译在最终的代码性能方面没有任何机会。

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

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

    【讨论】:

      【解决方案2】:

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

      待办事项是将 SWF 文件分解为 Keil 可编译的 C/C++ 源文件。

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

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

      我会试一试的!

      【讨论】:

        猜你喜欢
        • 2020-04-27
        • 2023-01-11
        • 1970-01-01
        • 2018-03-07
        • 2013-05-10
        • 2017-12-22
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        相关资源
        最近更新 更多