Попытка извлечь .uc из .u и скомпилировать: дневник борьбы

  • Автор темы Автор темы duke88
  • Дата начала Дата начала

duke88

Путник
Пользователь
Сообщения
25
Розыгрыши
0
Репутация
0
Реакции
2
Баллы
13
В ходе анализа нового файла Interface.u с использованием WOTgreal PE выяснилось, что в стандартном состоянии он не открывается на этапе загрузки. После изучения путей загрузки и внутренних проверочных механизмов были применены хук и корректировки для обхода этих ограничений. В результате удалось добиться корректного парсинга пакета, а также успешно выполнить экспорт в формат .uc.

После этого была предпринята попытка обратной компиляции — из .uc обратно в .u. В процессе поиска подходящего решения был обнаружен специализированный компилятор UnrealScript — UCC.exe, на базе которого и была организована попытка сборки.

Первоначальный подход заключался в сохранении окружения старой версии UCC.exe с одновременной адаптацией под новую версию Core.dll. Однако в процессе запуска возникли проблемы несоответствия import-символов. Для их устранения был проведён полный анализ экспортов Core.dll, после чего недостающие функции и данные были реализованы в виде Proxy DLL.

В рамках этой работы были выполнены следующие действия:

Приведение сигнатур функций между старой и новой версиями (включая переход с ANSI на Wide char)
Реализация wrapper-функций для обеспечения промежуточной совместимости (appSprintf, appStrcat, Parse и др.)
Обработка DATA-экспортов через собственные переменные Proxy, а не через forward (GMalloc, GFileManager, GLogHook и др.)
Согласование calling convention и decorated name

В результате UCC.exe начал корректно запускаться, удалось пройти этап appInit и дойти до стадии компиляции скриптов. Это подтвердилось логами Compiling, где множество классов успешно обрабатывались.

Однако на последующих этапах возникли дополнительные проблемы, связанные с особенностями структуры .u файлов.

Главный вывод, к которому удалось прийти: .u файлы не могут компилироваться изолированно. Это не просто процесс сборки скрипта — он требует наличия всей среды движка: родительских классов, системы типов, defaultproperties, а также пакетов Core и Engine.

Фактически компиляция .u — это не создание одного файла, а восстановление полной объектной модели, понятной движку. В ходе этой работы удалось значительно глубже понять внутреннюю архитектуру Unreal Engine, его пакетную систему и принципы работы UObject.

В итоге можно сказать, что технически задача решаема, однако для доведения её до стабильного состояния потребуется значительное количество времени и ресурсов. С практической точки зрения было принято решение временно отложить эту задачу.

…Возможно, когда-нибудь, при наличии достаточного времени или желания снова погрузиться в эту тему, я к ней вернусь.

В разработке L2 я нахожусь примерно неделю.
Если у кого-то есть инструмент, позволяющий компилировать .u файлы, буду благодарен, если поделитесь.


Telegram : @superduke1390r
 

Вложения

  • 1.webp
    1.webp
    115,5 КБ · Просмотры: 70
  • 2.webp
    2.webp
    295,5 КБ · Просмотры: 70
  • 30.webp
    30.webp
    149 КБ · Просмотры: 70
В ходе анализа нового файла Interface.u с использованием WOTgreal PE выяснилось, что в стандартном состоянии он не открывается на этапе загрузки. После изучения путей загрузки и внутренних проверочных механизмов были применены хук и корректировки для обхода этих ограничений. В результате удалось добиться корректного парсинга пакета, а также успешно выполнить экспорт в формат .uc.

После этого была предпринята попытка обратной компиляции — из .uc обратно в .u. В процессе поиска подходящего решения был обнаружен специализированный компилятор UnrealScript — UCC.exe, на базе которого и была организована попытка сборки.

Первоначальный подход заключался в сохранении окружения старой версии UCC.exe с одновременной адаптацией под новую версию Core.dll. Однако в процессе запуска возникли проблемы несоответствия import-символов. Для их устранения был проведён полный анализ экспортов Core.dll, после чего недостающие функции и данные были реализованы в виде Proxy DLL.

В рамках этой работы были выполнены следующие действия:

Приведение сигнатур функций между старой и новой версиями (включая переход с ANSI на Wide char)
Реализация wrapper-функций для обеспечения промежуточной совместимости (appSprintf, appStrcat, Parse и др.)
Обработка DATA-экспортов через собственные переменные Proxy, а не через forward (GMalloc, GFileManager, GLogHook и др.)
Согласование calling convention и decorated name

В результате UCC.exe начал корректно запускаться, удалось пройти этап appInit и дойти до стадии компиляции скриптов. Это подтвердилось логами Compiling, где множество классов успешно обрабатывались.

Однако на последующих этапах возникли дополнительные проблемы, связанные с особенностями структуры .u файлов.

Главный вывод, к которому удалось прийти: .u файлы не могут компилироваться изолированно. Это не просто процесс сборки скрипта — он требует наличия всей среды движка: родительских классов, системы типов, defaultproperties, а также пакетов Core и Engine.

Фактически компиляция .u — это не создание одного файла, а восстановление полной объектной модели, понятной движку. В ходе этой работы удалось значительно глубже понять внутреннюю архитектуру Unreal Engine, его пакетную систему и принципы работы UObject.

В итоге можно сказать, что технически задача решаема, однако для доведения её до стабильного состояния потребуется значительное количество времени и ресурсов. С практической точки зрения было принято решение временно отложить эту задачу.

…Возможно, когда-нибудь, при наличии достаточного времени или желания снова погрузиться в эту тему, я к ней вернусь.

В разработке L2 я нахожусь примерно неделю.
Если у кого-то есть инструмент, позволяющий компилировать .u файлы, буду благодарен, если поделитесь.


Telegram : @superduke1390r
Everything is searchable ,
editor itself , and compiler,
like from 2017 or so .
 
Everything is searchable ,
editor itself , and compiler,
like from 2017 or so .
Спасибо. Я посмотрю.
 
Назад
Сверху Снизу