Объявления

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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
Владимир  
Эксперт
Эксперт
 
Сообщения: 1032
Зарегистрирован: 30 окт 2012, 18:37
Пол: Не указан
Награды: 3
Высшая медаль (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (1)
Поблагодарили: 615 раз.

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

Сообщение Владимир » 21 ноя 2021, 16:14

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

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

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

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

Еще одна проблема IDA: не умеет нормально работать с union и битовыми полями(последнее возможно фиксится введением enum по типу того, что с флагами, только вместо разных флагов там разные биты для хранения чего-либы).

Вопиющий случай: ExtraInfoUnion(вроде так называется)
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 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)
Поблагодарили: 2162 раз.

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

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

Но как-то же IDA вот это достаёт: private: void __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short>>::_Split(void)? Может, только для стандартных библиотек такое возможно.
Вернуться к началу

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

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

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

Владимир писал(а):

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


Ну да, но иногда можно определить, что тот же vector<...> хранит, например, army в качестве типа элементов. Разработчики dreamcast-версии игры забыли при компиляции убрать дебажную информацию типа сигнатур функций, что хранится в памяти в конце базы, что нам очень на руку.
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

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

Сообщение RoseKavalier » 21 ноя 2021, 16:20

Good work so far, I will compare notes. Have you been working on this alone?
Also IDA doesn't have a nice way for a team to contribute to the same database (yet) but there is IDArling.

void_17 писал(а):

@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


I do not update the api from the single-header file, it's too much trouble.
Also I am refactoring the entire library, things will be relatively different but still similar.
Вернуться к началу

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

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

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

AlexSpl писал(а):

Но как-то же IDA вот это достаёт: private: void __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short>>::_Split(void)? Может, только для стандартных библиотек такое возможно.



Это т.н. FLIRT-сигнатура. Алгоритм, который определяет STL-функции по их поведению.

Я поясню. В IDA можно как хочешь назвать функцию, применяя лишь правила манглера Visual Studio. Но для IDA имя и тип разные вещи, ей плевать, какое там имя у функции. https://en.m.wikiversity.org/wiki/Visua ... e_mangling
Если вы нажмете на имя "красивую" функцию, то увидите, что вместо ::, <> и скобок там куча странных символов типа заглавных букв и @. Это зашифрованная сигнатура функции, в которой хранится:
имя метода,
класс метода,
аргументы,
соглашение о вызове,
спецификатор доступа,
тип и еще что-то, читайте статью по ссылке выше. IDA автоматически преобразует эту зашифрованную сигнатуру в "красивую", что вы и видите.
Пример:
Код: Выделить всё
abc<def<int>,void*>::xyz <- "красивый" деманглерный вид
xyz@?$abc@V?$def@H@@PAX@@ <- зашифрованный вид
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 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)
Поблагодарили: 2162 раз.

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

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

А теоретически программеры NWC могли использовать шаблоны? Т.е. была в этом необходимость? Например, в базе Героев 2 с дебаг-инфо я не вижу шаблонов.
Вернуться к началу

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

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

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

RoseKavalier писал(а):

Good work so far, I will compare notes. Have you been working on this alone?
Also IDA doesn't have a nice way for a team to contribute to the same database (yet) but there is IDArling.

Yes, I've been working on it alone for 2+ months. As we say, zaebalsya.

IDArling? Never heard of it. Seems like a good thing. We should try it. Create a discord server to cooperate, for instance.
Вернуться к началу

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

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

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

AlexSpl писал(а):

А теоретически программеры NWC могли использовать шаблоны? Т.е. была в этом необходимость? Например, в базе Героев 2 с дебаг-инфо я не вижу шаблонов.


Одно дело самому вручную написать шаблон, другое дело пользоваться STL-ными шаьлонами. NWC не видели необходимости в написании собственных шаблонов, хотя они были еще с 1980-ых и программисты NWC прекрасно знали о них, решили не создавать свои шаблоны.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 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)
Поблагодарили: 2162 раз.

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

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

Сейчас так же красиво, как в Героях 2:

Код: Выделить всё
void __thiscall game::WaitForPlayer(game *this, char *a2, int a3)
{
  game *v3; // [esp+Ch] [ebp-4h]

  v3 = this;
  if ( gbBlackoutPlayer && giNumHumanPlayers > 1 && !gbRemoteOn )
  {
    mouseManager::SetPointer(gpMouseManager, 0);
    gbAllBlack = 1;
    giBottomViewOverrideEndTime = KBTickCount() + 9999999;
    giBottomViewOverride = *((_BYTE *)&gbThisNetHumanPlayer + giCurPlayer) != 0;
    *((_DWORD *)gpSoundManager + 417) = 1;
    soundManager::SwitchAmbientMusic(gpSoundManager, 21);
    advManager::CompleteDraw(gpAdvManager, 1);
    advManager::UpdateHeroLocators(gpAdvManager, 1, 1);
    advManager::UpdateTownLocators(gpAdvManager, 1, 1);
    advManager::UpdateScreen(gpAdvManager, 0, 1);
    game::ShowHeroesLogo(v3);
    gbAllBlack = 0;
    NormalDialog(a2, 1, -1, -1, 9, *((char *)gpGame + 283 * a3 + 1180), -1, 0, -1, 0);
    soundManager::SwitchAmbientMusic(gpSoundManager, -1);
  }
}


Жаль, что нет информации о структурах/классах.
Вернуться к началу

Пред.След.

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

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

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