Объявления

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

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

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

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

Сообщение void_17 » 02 июн 2022, 09:58

Итого: если не учитывать FPU-операции, декомпиляция Mac-версии проще и быстрее, т.к. гораздо меньше оптимизированных функций.
Вернуться к началу

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

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

Сообщение void_17 » 03 июн 2022, 18:35

Выявил основные особенности Mac-базы:
1.Адресация к другим сегментам происходит чаще всего через еще один укзаатель.
Например, есть gpGame, а иногда используется указатель на него, который я назвал gppGame.
2. Частое использование смещенных указателей
Когда имеешь дело с большими структурами типа combatManager
Совет: чтобы понять, что используется смещенный указатель, обратите внимание на бредовое обращение к части поля: например, обращение на поле отдельного элемента массива с объектами. Измените тип указателя на void * и посмотрите на число: обычно оно "красивое", типа 0x10000.
3. В ассемблерный листинг лучше вообще не смотреть: процессор достаточно странный. Обращение к памяти в стеке тяжело разбирать, поэтому лучше пользоваться декомпилированных Си-подобным кодом, благо в новых версиях можно это делать для этого процессора. FPU-операции практически не поддерживаются и выглядят вырвиглазно в псевдокоде.
4. Главный плюс: меньше встроенных функций и обычно меньше оптимизаций внутри самих функций.

Что я хочу донести: НЕ ПОЛЬЗУЙТЕСЬ этой базой. Во многом потому, что она "не исследована": переносить вручную можно, но долго. Я лично использую ее тогда, когда хочу декомпилировать SoD функцию, а в обычной базе она очень длинная/запутанная/оптимизированная. Тоесть в основном для декомпилирования я использую все же оригинальную базу.
Вернуться к началу

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

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

Сообщение void_17 » 07 июл 2022, 18:07

Планирую наконец сделать полноценный API.

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

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

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

Сообщение void_17 » 03 ноя 2022, 15:18

Готовлю полноценное API для моддинга.
Документация и прочее будет прямо в коробке.

А пока некоторые спойлеры:
1) Будут использоваться STL-контейнеры vector, bitset, string, deque и др. версии MSVC 1998 года(которые использовали герои 3), с префиксом old, например old_vector<int>
Размеры:
old_vector<T> = 16,
old_string = 16,
old_deque<T> = 48,
old_bitset<N> зависит от N. При N = 48 размер = 8. Выравнивание по 4-м.

Интерфейс контейнеров аналогичен тому что у оригинальных. Можно использовать спокойно стандартные алгоритмы, как например std::find
2) Вместо int, short, char и пр. используются typedef-ы
int32_t, int16_t, int8_t, uint32_t и т.д.
3) bool, float, double, const char * остаются как есть.
Последний раз редактировалось void_17 14 ноя 2022, 05:11, всего редактировалось 3 раз(а).
Вернуться к началу

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 » 03 ноя 2022, 15:24

Цитата:
std::deque98<T> = 48

Я по старым исходникам выяснил, что современный std::deque далеко ушёл от того, что был во времена написания Героев 3. А вот современный вектор вполне можно использовать, если отключить кое-какие новые фишки std:

#define _SECURE_SCL 0
#define _HAS_ITERATOR_DEBUGGING 0
Вернуться к началу

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

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

Сообщение void_17 » 03 ноя 2022, 15:51

Так же я планирую сделать базу универсальной для всех версий героев 3 на Windows. Ну или хотя бы дать для этого почву.

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

С типами придется попотеть и разобрать их разницу...

Для этого например, будет шаблон get_ptr<T*>(uint SoD32address, ...) где первый адрес это адрес в SoD, а другие адреса будут соответствующие адреса в других версиях игры. Т.е. если захочу добавить новую версию, добавлю адрес в аргументы, которые на стадии компиляции в зависимости от версии превратятся в один нужный адрес.
Вернуться к началу

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 » 03 ноя 2022, 17:30

Take your time, как говорят в народе :smile1: Сделать что-то круче H3API - это, конечно, челлендж. У меня уже есть свой довольно ограниченный мини-API и я уже привык к оригинальным названиям классов. Для меня, например, army для стека не выглядит больше дико и непонятно. Наоборот, смущают старые листинги плагинов :smile2: Хороший API - это что-то вроде генеральной уборки в коде Героев. Приятно, когда всё стоит на своих полочках, которые даже подписаны :smile1:
Вернуться к началу

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

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

Сообщение void_17 » 05 ноя 2022, 12:16

ДААА определенно не стоило выбирать выходные для этого.
Я опять выгорел.

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

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 » 05 ноя 2022, 13:15

Я понимаю. Это сложная задача. Я остановился на следующей парадигме: изучай то, что тебе непосредственно нужно в данный момент. Поднять API целиком возможно лишь только в том случае, если тебе нравится сам процесс. А реальность сурова: на практике хорошо если половина API пригодится. Вечная проблема теории и её аппликаций :smile1:
Вернуться к началу

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

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

Сообщение void_17 » 14 ноя 2022, 04:41

Последнее приключение Индианы Джонса.
В этот раз вспомнил про порт Loki (авторов SDL) героев 3 на линух. К сожалению, порт RoE, но не суть.
Открыл для начала бинарник самой игры... Ничего нет. :smile24:

Зато есть частичная отладочная информация редактора карт. :smile11:
Изображение

upd.:
Особенности:
> Таблицы виртуальных функций находятся не в начале, а в конце типа. :smile5:
> Гораздо меньше оптимизаций(возможно так же и с бинарником самой игры, как нибудь посмотрю)
> Есть assert-ы. Кусочек кода + файл .cpp + строка кода + сигнатура функции
К сожалению названия аргументов и локальных переменных, типы возврата, а также переменные структур не сохранились. : :smile29:
Вложения
h3maper_1_3.tar
(4.74 МБ) Скачиваний: 132
Вернуться к началу

Пред.След.

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

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

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