GTA Builder Форум

GTA Vice City => Программирование => Тема начата: DK от Октябрь 15, 2016, 09:40:29 pm

Название: GTA VC. Базы данных.
Отправлено: DK от Октябрь 15, 2016, 09:40:29 pm
С выходом Android-версий GTA мы получили чуть больше информации о коде игры.
Имена классов, функций, переменных (почти всех) - ко всему этому мы получили доступ.
Если раньше мы давали функциям и классам "свои" имена (например, настолько привыкшийся CScriptThread), то теперь у нас есть оригинальные названия всего этого.

Различия между Android и PC базами

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

Также не стоит забывать, что разработчики, которые занимались мобильной версией игры, внесли в неё некоторые изменения (это и изменения, связанные с особенностями девайсов (другая файловая система, другой движок аудио, как пример), так и улучшения/исправления оригинального кода игры).
Ещё стоит сказать, что в мобильных версиях используется не Direct3D, а OpenGL версия RenderWare Graphics.

Ну и третье - в базе PC (только VC/III) представлены только те функции, которые действительно используются в игре (неиспользуемые не были добавлены в испольняемый файл компилятором). В базе мобильной версии такие функции могут встречаться.

Перенос названий из Android-версии базы в PC-версию

Описанные выше причины могут затруднить процесс переноса имён. У нас есть имена, но надо же ещё понять, какие функции из PC-базы соответствуют этим именам. Тем более, могут быть функции, которых нету в PC-версии, или же наоборот.
Тут уже нужно применять арсенал комплексных мер - анализ вызовов (ссылок) в двух базах, сравнение псевдокода, и даже порядок (очередность) функций.

Имена функций/переменных в Android-версии базы имеют вид
Код: C++
  1. _ZN11CTheScripts14LoadAllScriptsEPhj
Это такой вид декорации имён (name-mangling'а). Просто копируем эту строчку и вставляем в название функции/переменной в PC-базе. IDA умеет транслировать такие имена, и в списке функций или в коде декомпилятора мы увидим привычные имена.

maxorator уже перенёс имена почти всех функций в базу PC - правда, речь только о функциях. Имена переменных не перенесены.
Также, некоторые функции сопоставлены неправильно (редкие случаи).
Именно с этой базой я работаю, если речь идёт о Vice City.

База, основанная на базе maxorator'а (15.10.2016) (https://drive.google.com/uc?export=download&id=0B3pQzS44FafdeEtfY1lJZ19LSUk)
Android-база Vice City (https://drive.google.com/uc?export=download&id=0B3pQzS44FafdT1FqSlhPdUhOS0U)
Название: Re: GTA VC. Базы данных.
Отправлено: Shagg_E от Октябрь 16, 2016, 05:33:40 am
Ого, а поговаривали еще, что в мобилках не RW...
Спс за новую базу для Вайса!
Название: Re: GTA VC. Базы данных.
Отправлено: JuGGerNaunT от Февраль 02, 2018, 09:52:09 pm
Спасибо за базу. А стоит ли надеется на то, что будет выложена обновленная версия?
Название: Re: GTA VC. Базы данных.
Отправлено: DK от Февраль 04, 2018, 03:32:30 pm
В чат-сервере plugin-sdk в Discord публикуются актуальные базы для SA/VC/III (раздел gta-ida-idb).