如何将Flash SWF文件交叉编译成Keil可编译的C/ c++文件
How to cross compile Flash SWF file(s) into Keil Compilable C/C++ file(s)
我一直在研究将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++源文件。
我找到了一个开源的解决方案,旨在转换
- ABC对LLVM上TESSA (Type富集SSA)绢毛猴的影响
- TESSA to LLVM IR
- LLVM IR to C (By llc)
我要试试!
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 无论如何可以将webm / mp4文件编译/记忆为.exe程序吗?(C++)
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 如何使用 GLFW 预编译的二进制文件编译 Visual Studio 2019 发布版本
- Arduino IDE中自定义库类的.h文件编译错误的原因是什么
- makefile和错误将与大型项目分开的文件编译
- 如何使用生成文件编译具有多个目录的 c++ 项目
- 我可以将Visual Studio 2015头文件编译成dll并在VS2013中使用它吗?
- 使用Bazel将C 文件编译为python.h
- 使用 .a 文件编译简单的C++文件
- OpenCV 3.2 文件编译
- 如何从多个 cpp 文件编译 WebAssembly
- 从多个文件编译可以"undefined reference"
- 使用静态依赖性为共享二进制文件编译语法需要更加清晰
- 将Gsoap Src文件编译到我的项目中
- 如何用多个文件编译make下的dlib
- 字段的类型不完整,从多个文件编译
- 强制将特定文件编译为Objective-C/文件类型,但将整个项目编译为Objective C++
- OpenGLES 标头(包括 Availability.h)可防止 CPP 文件编译