Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

База данных IDA от void17

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

База данных IDA от void17

Сообщение void_17 » 21 ноя 2021, 10:47

Приветствую коммьюнити мододелов! Представляю вашему вниманию свою базу данных героев, содержащую скромное количество оригинальных сигнатур. Суть в том, чтобы восстановить остальные неизведанные сигнатуры игры, применяя знания STL C++, общие наблюдения о работе игры и, собственно, источник сигнатур - базу данных RoE Dreamcast. К сожалению, IDA не имеет встроенного декомпилятора для SH-4(RISC-процессора Sega Dreamcast), поэтому приходится анализировать только ассемблерный листинг. Ghidra имеет декомпилятор SH-4, но он очень кривой.

Изображение
Изображение
Изображение

Ссылки для скачивания:
SoD-База by Void_17: https://drive.google.com/file/d/1MY28K8 ... sp=sharing
RoE-Dreamcast-база: https://drive.google.com/file/d/1rAWaKj ... sp=sharing
Дамп отладочной информации из RoE-Dreamcast: https://drive.google.com/file/d/1f33j57 ... sp=sharing

ТЕХНИЧЕСКИЕ ОСОБЕННОСТИ ОРИГИНАЛЬНОЙ ПК-ВЕРСИИ ГЕРОЕВ МЕЧА И МАГИИ 3:
 
Heroes Of Might and Magic III - пошаговая стратегия, написанная на языке C++ с применением Microsoft Visual Studio. Стандарт языка - новейший на тот момент C++98.
Игра написана с использованием классов и инструментов библиотеки STL.

Код игры можно разделить на две большие части:
Интерфейс и Игровая Логика.
Интерфейс - это все кнопки, картинки, звуки и все то, что делает из холодного машинного кода удобный для человека инструмент управления программой.
Игровая Логика - это правила игры и поведение ИИ - компьютерного игрока.

ИНТЕРФЕЙС
Интерфейс реализован в основном на классах с большим количеством наследования, а значит, виртуальных методов. Компилятор ввиду особенностей виртуальных функций генерирует массив указателей на переопределенные методы - Таблица Виртуальных Функций (VMT, vftable).
В интерфейс входят классы pcx-изображений, звуков, музыки и диалоговых окон, шрифтов и текстов, 16 и 24 битной графики, анимаций, заключенных в DEF-архивы.

ИГРОВАЯ ЛОГИКА
Игровая логика реализована на разных классах, зачастую без применения виртуальных методов. Этих классов больше и они описывают характеристики героя, массива армии, монстров, городов, менеджеров и т.д.


Отвечу на все вопросы и дам рекоммендации ИТТ... Будем сотрудничать!
Дискорд сервер

https://discord.gg/BrbwGNFYgP
Последний раз редактировалось void_17 19 авг 2022, 07:27, всего редактировалось 6 раз(а).
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

Re: База данных IDA от void17

Сообщение void_17 » 21 ноя 2021, 10:54

@RoseKavalier, here is an alternative version of H3API, corrected a bit according to original class/structure names.
https://drive.google.com/file/d/12xZWv- ... sp=sharing
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

Re: База данных IDA от void17

Сообщение void_17 » 21 ноя 2021, 11:08

Чтобы "стандартизировать" все это дело и для систематизации в коммьюнити, следует ввести соглашение об именах.
Соглашения об именах:

1. Функции
Если вы не знаете, что метод точно принадлежит классу, но пока не до конца знаете, что это за сигнатура(или ее вообще нет в Dreamcast), следует переименовать функцию по следующему шаблону: имякласса_адрес
пример: combatManager_46A150
Если вы узнали, что эта сигнатура есть и функция с данной сигнатурой совпадает или почти полностью совпадает с функцией в Dreamcast-базе, скопируйте сигнатуру из Dreamcast-базы вместо имени этой функции. Если функция была добавлена в AB/SoD, отразите это перед именем метода.
Пример: combatManager::SOD_is_in_fear

2. Поля структур/классов:
Называть поля согласно CamelCase.
Пример: SoundFileName.
Неизвестные поля называть field_смещение или f_смещение
Неиспользуемые поля называть unused_смещение или u_смещение

3. Аргументы функций и локальные переменные:
Аргументы функций называть с заглавной буквы(искл.: this)
Локальные переменны со строчной. Желательно избегать snake_case.

4. Глобальные переменные
Приставка g — global, перед каждой глобальной переменной,
после нее p — pointer, если переменная является указателем или первая буква в названии типа, если НЕ указатель и НЕ целый класс/структура. Например глобальная int-переменная будет giVar
Последний раз редактировалось void_17 21 ноя 2021, 15:48, всего редактировалось 2 раз(а).
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2155 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 21 ноя 2021, 13:31

В Google Drive по умолчанию закрыт доступ к файлам. Откройте, пожалуйста.

Кстати, с сигнатурами из базы Dreamcast нужно быть осторожнее из-за изменения некоторых аспектов игры в SoD. Например, в Dreamcast параметр может быть bool, а в SoD уже есть накладные почвы и он становится char.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

Re: База данных IDA от void17

Сообщение void_17 » 21 ноя 2021, 15:38

Разрешил.

Да, насчет этого согласен.Для этого следует просто изменить настройки компилятора. По умолчанию там bool 4 байта занимает.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

Re: База данных IDA от void17

Сообщение void_17 » 21 ноя 2021, 15:49

Очень жаль, что в IDA нет шаблонов и она не может принять vector<army> ArmyVector, а только vector ArmyVector. Может плагин есть какой? Хотя врядли
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2155 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 21 ноя 2021, 15:56

Вроде, поддерживает:

Код: Выделить всё
private: void __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short>>::_Tidy(bool)

Код: Выделить всё
int __stdcall std__basic_string_unsigned_short_std__char_traits_unsigned_short__std__allocator_unsigned_short_____Tidy(char)
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

Re: База данных IDA от void17

Сообщение void_17 » 21 ноя 2021, 16:00

Не, не, я не про имена, я про собственно типы. Имена отображаются, потому что здесь вы видите имена за ширмой Visual Studio деманглера.Вот эти шаблонно сгенерированные имена IDA(с <> скобками и прочей чухней типа соглашения о вызове и спецификаторе доступа) без проблем отображает, но для IDA это просто имя, но не тип. Я кидал в шапке статью про это на педивикии. А впринципе никакой переменной IDA нельзя присвоить тип конкретного шаблона, вам ошибку выдаст. Приходится пояснять, какого типа элементы того же vector-a.
 
Кстати отображение этих самых псевдо-имен вы можете настроить в настройках Demangler... непосредственно во вкладке Settings. Long Names: имя, которое вы видите ,когда находитесь на верхушке функции в ассемблерном листинге. Short Names: имя, которое вы видите при вызове функции в ассемблерном листинге или в списке функций в соответствующем окне. Почему-то в дримкастной базе все __cdecl, поэтому отключите отображение соглашений о вызове и там и там, и настройте для удобства под себя.


Таким образом вполне засчет деманглера в функции может быть имя, содержащее в аргументе std::vector<army> &, но в действительности, дальше vector* вы не сможете задать тип, потому что IDA с шаблонами работать не умеет.
Последний раз редактировалось void_17 21 ноя 2021, 16:11, всего редактировалось 1 раз.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2155 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 21 ноя 2021, 16:10

Действительно:

Цитата:
IDA can parse and handle simple C++ class declarations. It cannot parse templates and other complex constructs but simple standard cases can be parsed.

.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

Re: База данных IDA от void17

Сообщение void_17 » 21 ноя 2021, 16:13

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

След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3