Стандартизированная база героев 3 - Printable Version +- Wake of Gods Forum | Форум Во Имя Богов (http://wforum.heroes35.net) +-- Forum: Герои Меча и Магии 3.5 WoG/ERA (/forumdisplay.php?fid=99) +--- Forum: Библиотека по моддингу (/forumdisplay.php?fid=186) +--- Thread: Стандартизированная база героев 3 (/showthread.php?tid=6419) |
Стандартизированная база героев 3 - void_17 - 21.11.2021 18:08 Приветствую коммьюнити мододелов! Представляю вашему вниманию свою базу данных героев, содержащую скромное количество оригинальных сигнатур. Суть в том, чтобы восстановить остальные неизведанные сигнатуры игры, применяя знания STL C++, общие наблюдения о работе игры и, собственно, источник сигнатур - базу данных RoE Dreamcast. К сожалению, IDA не имеет встроенного декомпилятора для SH-4(RISC-процессора Sega Dreamcast), поэтому приходится анализировать только ассемблерный листинг. Ghidra имеет декомпилятор SH-4, но он очень кривой. Ссылки для скачивания: SoD-База by Void_17: https://drive.google.com/file/d/1MY28K8cVbAeBzAbBBBf5ZeK-0aLMfz_d/view?usp=sharing RoE-Dreamcast-база: https://drive.google.com/file/d/1rAWaKjzy8q23wUBiHs_SlifPGuJ1U2B-/view?usp=sharing ТЕХНИЧЕСКИЕ ОСОБЕННОСТИ ОРИГИНАЛЬНОЙ ПК-ВЕРСИИ ГЕРОЕВ МЕЧА И МАГИИ 3: Как продолжить восстановление сигнатур и типов? Я применяю примерно следующие тактики: 1. Захожу в область интересующего класса 2. Нахожу "пробелы" ввиде неизученных методов/функций 3. Смотрю где они применяются 4. Сравниваю функцию по внутреннему устройству с функцией в дримкаст базе по ассемблерному листингу. Зачастую, вызовы функций идут по порядку. БУДЬТЕ ПРЕДЕЛЬНО ВНИМАТЕЛЬНЫ СО ВСТРОЕННЫМИ ФУНКЦИЯМИ! 5. Называю относительно базы Dreamcast. (Нажимаете на кнопку n и копируете функцию со всеми странными символами(это называется деманглер, позволяет в строке зашифровать сигнатуру функции https://en.wikiversity.org/wiki/Visual_C%2B%2B_name_mangling ) Но это если очень поверхностно, мне честно говоря трудно описать абсолютно все в деталях, я уже как-то интутивно это все делаю. Сложности: >STL функции и контейнеры, их методы. Затрудняют изучение засчет загромождения встроенными(inline) функциями. >Встроенные функции. Основная попаболь всех тех, кто изучает внутреннее устройство программ. Совет: помечайте повторяющимся комментарием(кнопка ";") и цветом те функции, которые встроены в SoD, но не в RoE-Dreamcast. (я помечал некоторые голубым цветом и комментарием "inline function") >Dreamcast база -- RoE. А моя база -- ПК-SoD. Но впринципе, это не особо страшно, так как новведения относительно легко заметить. >Не все функции идут друг за другом так, как в Dreamcast-базе. Есть одна из тактик, при которой можно просто брать сигнатуры из Dreamcast-базы, но нужно быть предельно осторожным, т.к. это не всегда так и там, где, казалось бы, в Dreamcast-базе по порядку идут методы одного класса, в SoD прямо посреди этого "ряда" может быть кусок другого класса. Остальное распишу потом. Отвечу на все вопросы и дам рекоммендации ИТТ. Надеюсь, что коммьюнити продолжит мое дело по приведению базы игры в порядок и систематизации всего, что известно об игре. Будем сотрудничать. Тред на другом форуме: https://handbookhmm.ru/forum/viewtopic.php?f=56&t=968 Соглашения об именах: 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 RE: Стандартизированная база героев 3 - void_17 - 21.11.2021 18:20 Прошу обратить внимание, что сигнатуры шифруются с помощью манглера Visual Studio. https://en.m.wikiversity.org/wiki/Visual_C%2B%2B_name_mangling На стадии компиляции, если включен debug-режим(что и сделали по ошибке программисты NWC при выпуске DreamCast версии героев 3), сигнатуры функций сохраняются в памяти программы и их можно использовать для изучения работы программы. Например: Code: abc<def<int>,void*>::xyz Code: xyz@?$abc@V?$def@H@@PAX@@ Но сохраненных в памяти SoD сигнатур нет, поэтому приходится вручную сравнивать и копировать имена из Dreamcast версии, что позволяет ну, во-первых, видеть более красивые функции, а также изучать и называть неизведанные функции, которые в воговской базе вообще имели вид sub_адрес. RE: Стандартизированная база героев 3 - daemon_n - 21.11.2021 19:15 void_17, приветствую новое лицо на нашем форуме! Огромное спасибо за вклад и желание помочь любимому [мне] комьюнити Знаю по ida и дизассемблированию не так много, потому спрашиваю, есть ли возможность смержить твою базу сигнатур с уже имеющейся на форуме базой из этого поста? UPD: какая версия IDA необходима для открытия данного файла? 7-ой явно не хватает RE: Стандартизированная база героев 3 - Raistlin - 21.11.2021 19:32 Без комментариев. RE: Стандартизированная база героев 3 - XEPOMAHT - 21.11.2021 19:33 Кто-нибудь может выгрузить имена с адресами функций в текстовый вид? Ибо эту базу невозможно открыть из Windows 2003. У меня старая от WoG Team, с именами функций от Сава, хотелось бы постепенно дополнить её и оригинальными именами. (21.11.2021 18:08)void_17 Wrote: Код игры можно разделить на две большие части: Вообще-то там 140 частей, по количеству *.cpp файлов с сишным кодом. (21.11.2021 18:20)void_17 Wrote: что и сделали по ошибке программисты NWC при выпуске DreamCast версии героев 3 Программисты из NWC не имеют к этому отношения. Портом занимались непосредственно подрядчики из Юбисофт (а чужой код обычно не ценят и не редко допускают утечки). RE: Стандартизированная база героев 3 - Berserker - 21.11.2021 23:20 void_17, большое спасибо за базы. 7-ая ИДА не открыла. RE: Стандартизированная база героев 3 - void_17 - 22.11.2021 00:08 Если быть точнее, это версия 7.6. Извиняюсь. Просто только в версиях 7.х IDA поддерживает инструкции SH-4. Еще там стоит парочку плагинов для удобства, поэтому сижу на новейшей версии. (21.11.2021 19:33)XEPOMAHT Wrote: Кто-нибудь может выгрузить имена с адресами функций в текстовый вид? Ибо эту базу невозможно открыть из Windows 2003. У меня старая от WoG Team, с именами функций от Сава, хотелось бы постепенно дополнить её и оригинальными именами. Блин, я даже предположить не мог, что в наше время используют такую версию Windows. Вроде был где-то скрипт для импорта и экспорта имен. Если таковой имеется, отправлю вам. RE: Стандартизированная база героев 3 - void_17 - 22.11.2021 00:16 (21.11.2021 19:15)daemon_n Wrote: Знаю по ida и дизассемблированию не так много, потому спрашиваю, есть ли возможность смержить твою базу сигнатур с уже имеющейся на форуме базой из этого поста? Если я не ошибаюсь, это — та самая база, на которой я основывался. Дойдут руки, сделаю соответствующий список типов по шаблону: оригинальное название — воговская база; Но учтите, что я еще не все типы изучил и переименовал. К тому же, в моей базе есть типы, которых нет в воговской; также поудалил "мусорные" типы в воговской. Основные продвижения есть в области ИИ и нетолько. Надеюсь мне в этом деле кто-то поможет. RE: Стандартизированная база героев 3 - Bes - 23.11.2021 23:21 void_17, стало любопытно, раз ты так глубоко, не побоюсь этого слова, копнул игру, то значит была тому причина, а не простое любопытство? над чем работал/работаешь по части моддинга Героев3 ? RE: Стандартизированная база героев 3 - void_17 - 28.11.2021 14:52 (23.11.2021 23:21)Bes Wrote: void_17, стало любопытно, раз ты так глубоко, не побоюсь этого слова, копнул игру, то значит была тому причина, а не простое любопытство? Извините, что отвечаю через неделю, я просто на другом форуме активничаю. На самом деле я особо конкретно моддингом не интересуюсь. Хотелось бы игру переписать, чтобы упростить жизнь моддерам, а пока не все еще изучено, эта база будет служить на верность моддерам. Да, я знаю, что есть VCMI. Хотя, все же давно, год так назад, хотел сделать мод Heroes 3 Cup of Titan. Там были бы новые кампании, баланс и прочее, но особо много нововведений не было бы. По-сути, это был бы "соревновательный" SoD. Потом мне захотелось игру переписать, но это офигеть можно самому делать, поэтому создал тред, в котором мы помогаем друг другу. RE: Стандартизированная база героев 3 - Elmore - 28.11.2021 17:45 Если есть желание и/или необходимость, можем создать отдельный канал в дискорде ERA (ссылка в подписи). RE: Стандартизированная база героев 3 - void_17 - 28.11.2021 18:29 У меня уже свой есть. https://discord.gg/BrbwGNFYgP RE: Стандартизированная база героев 3 - void_17 - 16.12.2021 17:37 Ковырял разные версии героев. Оказывается, все это время у нас под носом лежала андроид версия HD edition с дебажными символами. dotemu это разработчики Heroes 3 HD edition если что. Весь кайф в том, что IDA умеет декомпилировать little endian ARM. Из недостатков пожалуй отличие от оригинальных структур и классов и еще огромное количество встроенных функций, прямо как в SoD, поэтому дримкаст все еще актуален, так как меньше всего подвергся оптимизации. Качайте и смотрите сами: https://drive.google.com/file/d/1zA5cjRc5lO3w9AfT_FKGvin8FzXBV9UU/view?usp=sharing RE: Стандартизированная база героев 3 - void_17 - 23.01.2022 12:21 https://drive.google.com/file/d/1MY28K8cVbAeBzAbBBBf5ZeK-0aLMfz_d/view?usp=sharing Обновил базу до версии BETA 2.0 Перевел на новый экзешник и добавил типов, которых не было. Разобрано много типов, которые не были разобраны в старой базы или были разобраны не до конца. Надеюсь на помощь коммьюнити на улучшение базы, в первую очередь восстановление типов. RE: Стандартизированная база героев 3 - pobr - 23.01.2022 15:10 (23.01.2022 12:21)void_17 Wrote: Обновил базу до версии BETA 2.0 CSequence это массив указателей: Code: struct CSequence RE: Стандартизированная база героев 3 - pobr - 23.01.2022 15:18 И еще насчет таблиц виртуальных функций, можно сделать еще красивей. На примере класса resource: Code: struct resource_vtbl В псевдокоде будет выглядеть натурально как вызов функции C++. RE: Стандартизированная база героев 3 - void_17 - 24.01.2022 07:40 (23.01.2022 15:10)pobr Wrote:(23.01.2022 12:21)void_17 Wrote: Обновил базу до версии BETA 2.0 Пока переписывал с RoE, звездочку забыл... Сейчас обновлю и еще парочку ошибок исправлю. (23.01.2022 15:18)pobr Wrote: И еще насчет таблиц виртуальных функций, можно сделать еще красивей. Хорошая идея кстати говоря, думал об этом, но никак руки не дошли. Чуть позже запилю. RE: Стандартизированная база героев 3 - void_17 - 24.01.2022 09:24 https://drive.google.com/file/d/1MY28K8cVbAeBzAbBBBf5ZeK-0aLMfz_d/view?usp=sharing Обновил базу (2.1 -> 2.1.1) Исправил типы: game, combatManager, CSequence, CSprite. Добавил парочку сигнатур, а также типы некоторых таблиц виртуальных функций. RE: Стандартизированная база героев 3 - pobr - 24.01.2022 09:53 В классе resource судя по дампу поле Name равно не 16 байт, но четыре байта никогда не используются. RE: Стандартизированная база героев 3 - void_17 - 24.01.2022 13:42 Еще раз обновил базу, т.к. в очередной раз наткнулся на собственную невнимательность. Сместились поля дальше worldMap. Пофиксил это дело. RE: Стандартизированная база героев 3 - igrik - 25.01.2022 05:59 (24.01.2022 15:38)void_17 Wrote: Получается, combatManager разобран абсолютно полностью(кроме поля unknown1). Спустя стольких лет..Агонь, мужики! Это очень круто! UPD: я не могу быть уверен на 100%, но склоняюсь что тут пропущено 2 байта (если говорить о SoD) Code: int iNextActionGridIndex2; RE: Стандартизированная база героев 3 - void_17 - 26.01.2022 08:19 В SoD-овской базе я делал combatManager как раз под SoD, сверяя с тем, что есть у sav-a. Согласно оператору new ( см. функцию InitMainClasses() ), размер combatManager - 0x140EC, что собственно у меня в базе и есть. Да и доступ к переменным не сбивается. Поэтому все ок, не волнуйтесь. RE: Стандартизированная база героев 3 - igrik - 26.01.2022 08:53 Ты ко мне на вы? И я немного о другом говорю... Доступ в базе то не сбивается, потому что эти 2 байта как раз в базе и указаны. А в описанном тобой классе - нет. Т.е. нельзя просто взять и сходу использовать указанный класс, что в свою очередь неосвещённых может поставить в тупик. И таких мест далеко не одно (видимо из-за выравнивания). ... Я о том, что такой важный момент желательно указывать. RE: Стандартизированная база героев 3 - pobr - 28.01.2022 12:01 То, что сейчас называется SpriteResourceFile, это не LODFile, как было в Dreamcast версии. Теперь это структура из указателя на имя файла и собственно LODFile (400 байт): Code: struct LODFileMapItem Сам LODFile выглядит так (396 байт): Code: struct LODFile И таких структур 8 штук, возможно массив. RE: Стандартизированная база героев 3 - Berserker - 29.01.2022 01:13 Да, массив. RE: Стандартизированная база героев 3 - void_17 - 13.08.2024 18:15 @XEPOMAHT, я в скором времени собираюсь релизить очередную версию базу(релиз состоится одновременно с релизом NH3API). Я знаю ты не хочешь обновлять железо и OS, подскажи, какой версией IDA Pro ты пользуешься? Я могу написать питоновский скрипт который позволит импортировать функции и типы. RE: Стандартизированная база героев 3 - XEPOMAHT - 13.08.2024 19:42 (13.08.2024 18:15)void_17 Wrote: подскажи, какой версией IDA Pro ты пользуешься? Я могу написать питоновский скрипт который позволит импортировать функции и типы. IDA 6.5 - максимальная версия под WinXP/2003. Всё, что выше - уже не запускается. RE: Стандартизированная база героев 3 - Berserker - 13.08.2024 23:36 void_17, спасибо большое за труд. По поводу API. Ты не смотрели H3Api от RoseKavalier? Может быть стоило его развивать? RE: Стандартизированная база героев 3 - void_17 - 14.08.2024 00:13 (13.08.2024 19:42)XEPOMAHT Wrote: IDA 6.5 - максимальная версия под WinXP/2003. Всё, что выше - уже не запускается. Хмм, не такая уж и древняя. Что-нибудь придумаю Главное, чтобы у тебя был Python. Версии, работающие на Windows XP: https://stackoverflow.com/questions/47516712/what-versions-of-python-will-work-in-windows-xp (2.7.9 и 3.4.4) RE: Стандартизированная база героев 3 - void_17 - 14.08.2024 00:18 (13.08.2024 23:36)Berserker Wrote: void_17, спасибо большое за труд. Рад стараться! (13.08.2024 23:36)Berserker Wrote: По поводу API. Ты не смотрели H3Api от RoseKavalier? Может быть стоило его развивать? Да, видел. Моя NH3API основывается на моей базе, 90% информации откуда - оригинальная от программистов NWC(точнее от отладочной информации dreamcast RoE). Остальные 10% отреверсенные мною самостоятельно AB/SoD-овские нововведения. H3API RoseKavalier-a основывается на самостоятельном реверсинге в слепую, ещё до того как слили dreamcast версию игры. Плюс у неё другая архитектура и нет соответствующей базы данных. А у меня и база и своя API, целая экосистема считай. Самое главное - что информация во многом 100% достоверна из-за того что досталась от разработчиков. Из плюсов для ретрофилов - моя NH3API будет поддерживать старые Visual Studio 2005/2008, а также MinGW GCC(сам компилятор работает на windows XP!) RE: Стандартизированная база героев 3 - Berserker - 17.08.2024 03:49 void_17, уже опробовал новую базу при отладки ИИ алгоритмов. Помогла. Так что теперь параллельно использую две. RE: Стандартизированная база героев 3 - void_17 - 28.09.2024 15:12 Обновил базу данных до версии 2.0RC Скачать Это последняя версия базы перед релизом NH3API. Начиная с версии 2.0, база будет храниться на GitHub репозитории. RE: Стандартизированная база героев 3 - Berserker - 28.09.2024 20:39 void_17, шикарно, спасибо! RE: Стандартизированная база героев 3 - void_17 - 09.11.2024 17:00 NH3API почти готово к релизу. (Я сделаю отдельный тред по NH3API) Будет поддержка Visual Studio 2005-2022, GCC, Clang. daemon_n пару месяцев назад скидывал эравские хедеры, они будут интегрированы в NH3API в качестве необязательных. RE: Стандартизированная база героев 3 - wessonsm - 09.11.2024 21:10 void_17, база будет обновляться? RE: Стандартизированная база героев 3 - Berserker - 10.11.2024 01:09 void_17, прогресс радует! Будет репозиторий на гите? RE: Стандартизированная база героев 3 - void_17 - 10.11.2024 06:03 Да, база будет обновляться. С релизом NH3API выпущу версию 2.0 базы. Репозиторий будет на GitHub |