Я занимался кросс-компиляцией SWF-файлов в исходные файлы C / C ++
Существует множество инструментов для декомпиляции SWF-файлов в текстовые форматы.
Бесплатный SWF-декомпилятор предоставляет множество решений с открытым исходным кодом по этому вопросу.
Чтобы декомпилировать SWF в исходные файлы C / C ++,
Я пробовал следующие решения
1) Haxe: Компилятор Haxe отвечает за перевод языка программирования Haxe в исходный код или двоичный код целевой платформы
Для этого мне нужно
а) декомпилировать SWF в файлы ActionScript
б) Конвертировать скрипты действий в скрипт языка Haxe.
в) хакерский компилятор в исходный файл C ++
d) Перекомпилируйте исходные файлы C ++ с помощью Keil MDK-ARM
Недостаток: выходной файл C ++ огромен & содержит много ресурсов, подобных Flex SDK, в формате исходного кода C, который трудно перекомпилировать в Keil MDK-ARM. И это кажется довольно неэффективной работой, чтобы получить скомпилированный двоичный код Keil.
Недавно я нашел другое возможное решение для этого с помощью Adobe Flash C ++ Compiler, то есть FlasCC (
Полная BSD-подобная среда разработки C / C ++ с кросс-компилятором на основе GCC, способная нацеливаться на среду выполнения Adobe Flash)
Но я не уверен, что это сработает так, как я ожидал.
Поскольку FlasCC может компилировать код c / c ++ в байт-код ActionScript (ABC), а также байт-код LLVM.
Моя мысль
а) Анализировать байт-код SWF ActionScript (ABC)
б) Прочитать байт-код ActionScript (ABC) во FlahCC (не уверен, можно ли это сделать?)
c) С помощью эквивалентного байт-кода ActionScript (ABC) в FlasCC выведите его байт-код LLVM (не уверен, можно ли это сделать?)
d) Преобразовать байт-код LLVM в код C ++ с помощью LLC
Таким образом, байт-код ActionScript может быть оптимизирован с помощью LLVM LTO (Link Time Optimized).
Так как я не являюсь экспертом, мне нужно дать совет по этому вопросу.
Это работоспособно? Или есть другой способ сделать это?
Вообщем нет. Автоматическая компиляция flash в двоичную систему будет довольно сложной и неэффективной задачей.
Я удивлен, что первый подход, который вы использовали, действительно сработал, я ожидал, что полученный код будет случайным образом давать сбой. В любом случае, не существует единственного шанса, что as3-> haxe-компиляция может быть эффективной в отношении производительности кода.
Что касается второго подхода, компиляторы являются односторонними, вы не можете использовать FlasCC для декомпиляции байт-кода ABC или для компиляции as3, его можно использовать только для компиляции c / c ++ в ABC.
Компиляция ABC в LLVM, а затем в двоичный файл кажется гораздо более выполнимой и выполнимой, но потребует довольно больших усилий, и снова я сомневаюсь, что результат будет быстрым. И я почти уверен, что это будет намного медленнее, чем просто запуск SWF во флеш-плеере на целевой платформе. (Тем не менее, учитывая то, что вы уже сделали, я предполагаю, что вы сможете сделать прототип за 2 или 3 месяца тяжелой работы, так что это может стоить того.)
Мне кажется, теперь гораздо яснее разложить всю работу.
Задача состоит в том, чтобы разложить SWF-файлы на скомпилированные в Keil исходные файлы C / C ++.
Я нашел решение с открытым исходным кодом, предназначенное для преобразования
Я дам ему попробовать!