Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: База данных IDA от void17Итого: если не учитывать FPU-операции, декомпиляция Mac-версии проще и быстрее, т.к. гораздо меньше оптимизированных функций.
|
Re: База данных IDA от void17Выявил основные особенности Mac-базы:
1.Адресация к другим сегментам происходит чаще всего через еще один укзаатель. Например, есть gpGame, а иногда используется указатель на него, который я назвал gppGame. 2. Частое использование смещенных указателей Когда имеешь дело с большими структурами типа combatManager Совет: чтобы понять, что используется смещенный указатель, обратите внимание на бредовое обращение к части поля: например, обращение на поле отдельного элемента массива с объектами. Измените тип указателя на void * и посмотрите на число: обычно оно "красивое", типа 0x10000. 3. В ассемблерный листинг лучше вообще не смотреть: процессор достаточно странный. Обращение к памяти в стеке тяжело разбирать, поэтому лучше пользоваться декомпилированных Си-подобным кодом, благо в новых версиях можно это делать для этого процессора. FPU-операции практически не поддерживаются и выглядят вырвиглазно в псевдокоде. 4. Главный плюс: меньше встроенных функций и обычно меньше оптимизаций внутри самих функций. Что я хочу донести: НЕ ПОЛЬЗУЙТЕСЬ этой базой. Во многом потому, что она "не исследована": переносить вручную можно, но долго. Я лично использую ее тогда, когда хочу декомпилировать SoD функцию, а в обычной базе она очень длинная/запутанная/оптимизированная. Тоесть в основном для декомпилирования я использую все же оригинальную базу. |
Re: База данных IDA от void17Планирую наконец сделать полноценный API.
Залью на гитхаб, поэтому вы сможете делать правки и дополнения. |
Re: База данных IDA от void17Готовлю полноценное 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 раз(а).
|
Re: База данных IDA от void17Цитата: Я по старым исходникам выяснил, что современный std::deque далеко ушёл от того, что был во времена написания Героев 3. А вот современный вектор вполне можно использовать, если отключить кое-какие новые фишки std: #define _SECURE_SCL 0 #define _HAS_ITERATOR_DEBUGGING 0 |
Re: База данных IDA от void17Так же я планирую сделать базу универсальной для всех версий героев 3 на Windows. Ну или хотя бы дать для этого почву.
Можно будет выбрать для какой версию игры компилить. Правда, я не буду лишние силы тратить на изучение других версий с нуля. Скорее всего мелкие простые функции я напишу вручную, а большие как вызов через указатель. С типами придется попотеть и разобрать их разницу... Для этого например, будет шаблон get_ptr<T*>(uint SoD32address, ...) где первый адрес это адрес в SoD, а другие адреса будут соответствующие адреса в других версиях игры. Т.е. если захочу добавить новую версию, добавлю адрес в аргументы, которые на стадии компиляции в зависимости от версии превратятся в один нужный адрес. |
Re: База данных IDA от void17Take your time, как говорят в народе Сделать что-то круче H3API - это, конечно, челлендж. У меня уже есть свой довольно ограниченный мини-API и я уже привык к оригинальным названиям классов. Для меня, например, army для стека не выглядит больше дико и непонятно. Наоборот, смущают старые листинги плагинов Хороший API - это что-то вроде генеральной уборки в коде Героев. Приятно, когда всё стоит на своих полочках, которые даже подписаны
|
Re: База данных IDA от void17ДААА определенно не стоило выбирать выходные для этого.
Я опять выгорел. Вернемся через недельку. |
Re: База данных IDA от void17Я понимаю. Это сложная задача. Я остановился на следующей парадигме: изучай то, что тебе непосредственно нужно в данный момент. Поднять API целиком возможно лишь только в том случае, если тебе нравится сам процесс. А реальность сурова: на практике хорошо если половина API пригодится. Вечная проблема теории и её аппликаций
|
Re: База данных IDA от void17Последнее приключение Индианы Джонса.
В этот раз вспомнил про порт Loki (авторов SDL) героев 3 на линух. К сожалению, порт RoE, но не суть. Открыл для начала бинарник самой игры... Ничего нет. Зато есть частичная отладочная информация редактора карт. upd.: Особенности: > Таблицы виртуальных функций находятся не в начале, а в конце типа. > Гораздо меньше оптимизаций(возможно так же и с бинарником самой игры, как нибудь посмотрю) > Есть assert-ы. Кусочек кода + файл .cpp + строка кода + сигнатура функции К сожалению названия аргументов и локальных переменных, типы возврата, а также переменные структур не сохранились. :
|
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2