Объявления
Поздравляем
Roman2211


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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

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

Сообщение AlexSpl » 26 ноя 2021, 12:20

Наткнулся на интересный плагин для IDA - Yagi:

Цитата:
Yagi intends to include the wonderful Ghidra decompiler into both IDA pro and IDA Free.

Обрадовался, что раз Ghidra поддерживает декомпиляцию Renesas SH-4, то и IDA будет, но нет. Однако не всё потеряно :smile2: Разработчики пишут:

Цитата:
It's easy to add one if it's supported by Ghidra. Just open an issue, and we will do our best!

Если реально легко добавить, то, может, попробовать? Или хотя бы открыть issue, вдруг добавят?

В любом случае, даже без SH-4 это полезный плагин. Например, можно сравнивать декомпиляты от Hex-Rays и Ghidra, что может помочь решить некоторые неочевидные проблемы. Установка простая: есть инсталлятор. В самой IDA декопилятор Ghidra вызывается по F3, стандартный Hex-Rays - F5.
Вернуться к началу

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

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

Сообщение void_17 » 26 ноя 2021, 13:04

Цитата:
На сервер захожу, просит сменить пароль и дальше не пускает, поэтому просто залью на файлообменник.

as239 как увидит - решит. У меня такое было, я попросил, он сбросил и все нормально щас.
Сейчас обновлю базу...

upd.: обновил базу, буду обновлять в одном файле, тобишь ссылка гугл диска обновляться не будет.

Приведу в порядок все enum уже завтра, сегодня я уже не успею.
Вернуться к началу

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

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

Сообщение void_17 » 26 ноя 2021, 14:11

AlexSpl писал(а):

Наткнулся на интересный плагин для IDA - Yagi:

Цитата:
Yagi intends to include the wonderful Ghidra decompiler into both IDA pro and IDA Free.

Обрадовался, что раз Ghidra поддерживает декомпиляцию Renesas SH-4, то и IDA будет, но нет. Однако не всё потеряно :smile2: Разработчики пишут:

Цитата:
It's easy to add one if it's supported by Ghidra. Just open an issue, and we will do our best!

Если реально легко добавить, то, может, попробовать? Или хотя бы открыть issue, вдруг добавят?

В любом случае, даже без SH-4 это полезный плагин. Например, можно сравнивать декомпиляты от Hex-Rays и Ghidra, что может помочь решить некоторые неочевидные проблемы. Установка простая: есть инсталлятор. В самой IDA декопилятор Ghidra вызывается по F3, стандартный Hex-Rays - F5.


Проблема в том, что в IDA Pro базы на процессоре SH-4 не поддерживают плагины. Да и у иды куда чище декомпилятор.
Вернуться к началу

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

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

Сообщение AlexSpl » 26 ноя 2021, 14:18

Цитата:
Проблема в том, что в IDA Pro базы на процессоре SH-4 не поддерживают плагины.

Это откуда такая информация?
Вернуться к началу

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

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

Сообщение void_17 » 26 ноя 2021, 14:38

Сам пробовал. Они просто напросто не отображаются. Пытался вручную подключить, их там нет. IDA заточена под PC-шные процессоры и в этом плане лучше работает, но Ghidra поддерживает куда больше процессоров.
Вернуться к началу

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

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

Сообщение AlexSpl » 26 ноя 2021, 16:38

Но Yagi поддерживает и другие процессоры. Получается, для них плагины работают, а для SH-4 вдруг нет?
Вернуться к началу

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

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

Сообщение AlexSpl » 26 ноя 2021, 19:46

А я не ошибся с A, B, С. A - действительно милишники, B - стрелки (причём те, которые могут стрелять, остальные отправляются в A), С - самый сильный отряд из A и B. Поставил хайхук на конструктор type_AI_spellcaster и сижу медитирую:

Изображение

AI_ArmyInfo.field_8 - это количество вражеских отрядов, достающих отряд AI за один ход. Можно подумать над названием поля. average_damage - это средний урон, который может нанести отряд AI_ArmyInfo.Army, average_damage_0 - это суммарный приход от всех угрожающих отрядов.

Теперь без труда можно расшифровать функцию взвешивания заклинания Shield, например:

Код: Выделить всё
int __thiscall type_AI_spellcaster::get_shield_value(
        type_AI_spellcaster *this,
        const struct army *Army,
        type_enchant_data data)
{
  int Index; // eax
  army *Army_0; // edi

  Index = Army->Index;
  Army_0 = this->AI_MeleeEnemy[Index].Army;
  if ( Army_0 )
    return type_AI_spellcaster::get_defense_boost_value(
             this,
             Army,
             Army_0,
             data.SpellDuration,
             (this->AI_MeleeEnemy[Index].average_damage_0 + this->AI_ShootingEnemy[Index].average_damage_0)
           / (this->AI_ShootingEnemy[Index].average_damage_0
            + this->AI_MeleeEnemy[Index].average_damage_0 * akSpelltraits[SPL_SHIELD].Effect[data.SchoolLevel] / 100));
  else
    return 0;
}

А вот Air Shield:

Код: Выделить всё
int __thiscall type_AI_spellcaster::get_air_shield_value(
        type_AI_spellcaster *this,
        const struct army *Army,
        type_enchant_data data)
{
  int Index; // eax
  army *v4; // edi

  Index = Army->Index;
  v4 = this->AI_ShootingEnemy[Index].Army;
  if ( v4 )
    return type_AI_spellcaster::get_defense_boost_value(
             this,
             Army,
             v4,
             data.SpellDuration,
             (this->AI_ShootingEnemy[Index].average_damage_0 + this->AI_MeleeEnemy[Index].average_damage_0)
           / (this->AI_MeleeEnemy[Index].average_damage_0
            + this->AI_ShootingEnemy[Index].average_damage_0
            * akSpelltraits[SPL_AIR_SHIELD].Effect[data.SchoolLevel]
            / 100));
  else
    return 0;
}

Найдите 10 отличий :smile9:

Коэффициент для Shield:

(cуммарный урон от достающих рукопашников + суммарный урон от достающих стрелков) / (суммарный урон от достающих стрелков + суммарный урон от достающих рукопашников * коэффициент снижения урона для Shield)

Вот такой нехитрый коэффициент. И разумный.

Для Air Shield всё наоборот:

(суммарный урон от достающих стрелков + cуммарный урон от достающих рукопашников) / (cуммарный урон от достающих рукопашников + суммарный урон от достающих стрелков * коэффициент снижения урона для Air Shield)
Вернуться к началу

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

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

Сообщение AlexSpl » 26 ноя 2021, 21:47

Для тех, кто хочет полистать текущую базу в блокноте или Notepad++:

Heroes3f_txt.zip
(2.05 МБ) Скачиваний: 220
Вернуться к началу

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

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

Сообщение AlexSpl » 27 ноя 2021, 01:13

Ещё один пример:

Изображение

Изображение

Отряду Naga Queens угрожает 3 отряда противника, которые могут атаковать в ближнем бою. Средний урон отряда Crusaders по отряду Naga Queens равен 1252 ед.*, а всех трёх отрядов - 2258 ед. Самый сильный отряд, который угрожает отряду Naga Queens, - отряд Crusaders, остальные отряды можно достать из битового поля type_AI_spellcaster.bitfield_14 (type_AI_spellcaster.bitfield_18 тоже хранит угрощающие отряды, но там выборка, позже гляну, кто туда попадает**). Кастующие отряды тоже считаются угрозой (например, те же Ogre Magi).

* Тут мы сразу видим косяк AI: не учитывается двойная атака Crusaders. Это уже второе место, где я вижу, что для рукопашников не учитыватся двойная атака. Для стрелков всё нормально.

** Судя по коду, в bitfield_14 попадают угрожающие стрелки, а в bitfield_18 - угрожающие отряды ближнего боя. Стрелки, которые не могут стрелять, считаются отрядами ближнего боя.
Вернуться к началу

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

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

Сообщение void_17 » 27 ноя 2021, 01:43

Очень интересный подход к выявлению неизвестных полей. Надо быть остальные типы, связанные с AI подобным образом разобрать...

Например, type_town_threat_checker и других checker-ов.
Последний раз редактировалось void_17 27 ноя 2021, 01:47, всего редактировалось 1 раз.
Вернуться к началу

Пред.След.

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

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

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

cron