Объявления

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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

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

Сообщение RoseKavalier » 22 ноя 2021, 15:14

Positive SP values are more often than not a result of incorrect disassembly (wrong function signature). Fixing the stack manually is just a crutch and shouldn't be used, better to fix the real error.

"Trash" functions are static initializers like Alex has been saying.
They start at 0065E004 and go on until 0065F1E8.
Most of them will be "trash" but you have non-trash things in there, like LOD initializers for instance. You will notice most of those also register a function _onexit(func), which is the static destructor for whatever was being initialized early on.

I personally renamed all of them init_XYZ if they started with sub_. With that said, I finished comparing notes; we worked on a lot of same things but you had around 300 named functions I had not yet inspected while I worked in other directions.
I had not expected someone else would be as mad as myself to give themselves the trouble with this work, bravo :smile11:
Вернуться к началу

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

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

Сообщение AlexSpl » 22 ноя 2021, 15:25

Как известно, мы пользуемся SoD 3.2, который прошёл процедуру UnSafeDisk :smile1: Я посмотрел код Героев 2. Там такого трэша с инициализацией нет. Как Вы думаете, может это как-то связано с устранением защиты? Надо посмотреть список функций-инициализаторов в Complete, который шёл без защиты.
Вернуться к началу

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

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

Сообщение AlexSpl » 22 ноя 2021, 15:31

Ан нет, в Complete та же фигня. Никак не пойму, зачем столько одинаковых функций, да ещё с циклом от 0 до 9, если цикл проходится только один раз? :smile5:

Код: Выделить всё
int sub_401000()
{
  int result; // eax
  unsigned int v1; // ebx
  unsigned int v2; // esi
  int v3; // [esp+8h] [ebp-4h]

  result = 0;
  v1 = 1;
  v3 = 0;
  v2 = 0;
  do
  {
    if ( v2 >= 0xA )
      break;
    if ( (v1 & 1) != 0 )
    {
      *(&v3 + (v2 >> 5)) |= 1 << (v2 & 0x1F);
      result = v3;
    }
    v1 >>= 1;
    ++v2;
  }
  while ( v1 );
  dword_6911E8 = result;
  return result;
}

v1 = 1 во всех функциях и второй итерации не будет. Но зачем тогда цикл? Или это частный случай какой-то известной функции?
Вернуться к началу

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

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

Сообщение RoseKavalier » 22 ноя 2021, 15:39

This is just computing the mask for std::bitset<10>
1 + 2 + 4 + 8 +... + 1 << 9

It is highly likely that there was a lot of dangling code that was abandoned (including global variables). Even when they are not used, these variables have to be initialized.
Furthermore, you can see in the DreamCast base that there is code for Sprite encoding, this would be linked statically from a secondary shared library which would also have decoding. Who knows exactly what the compiler decided to include.

Код: Выделить всё
CSpriteFrame::clear(void)   000858AC   
CSpriteFrame::SetPixelFormat(uint,uint,uint)   00085918   
CSpriteFrame::importPCXFile(char const *)   00085A18   
CSpriteFrame::importCroppedPCXFile(char const *)   00085AF4   
CSpriteFrame::GetPixel(int,int)   00085D60   
CSpriteFrame::Crop(void)   00085ECC   
CSpriteFrame::Encode(TEncodingMethod)   00086094   
CSpriteFrame::EncodeGeneral(void)   000860D8   
CSpriteFrame::EncodeTileset(void)   0008628C   
CSpriteFrame::EncodeAdvObj(void)   00086440   
Вернуться к началу

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

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

Сообщение AlexSpl » 22 ноя 2021, 15:44

BTB should know of it. It's a huge amount of free space for his binary patches :smile1:
Вернуться к началу

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

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

Сообщение RoseKavalier » 22 ноя 2021, 15:48

Wait until he learns about things like adding entire PE sections :smile6:
Вернуться к началу

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

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

Сообщение AlexSpl » 22 ноя 2021, 15:52

I tried to point him in the right direction, but sections are not as easy as to zero function pointers in a table. The big plus is that you'll have continuous free space.
Вернуться к началу

offlineХеромант  
имя: OL
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 21 ноя 2021, 19:42
Пол: Мужчина
Поблагодарили: 2 раз.

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

Сообщение Херомант » 22 ноя 2021, 21:03

AlexSpl писал(а):

Код: Выделить всё
int sub_401000()
{
  int result; // eax
  unsigned int v1; // ebx
  unsigned int v2; // esi
  int v3; // [esp+8h] [ebp-4h]

  result = 0;
  v1 = 1;
  v3 = 0;
  v2 = 0;
  do
  {
    if ( v2 >= 0xA )
      break;
    if ( (v1 & 1) != 0 )
    {
      *(&v3 + (v2 >> 5)) |= 1 << (v2 & 0x1F);
      result = v3;
    }
    v1 >>= 1;
    ++v2;
  }
  while ( v1 );
  dword_6911E8 = result;
  return result;
}

v1 = 1 во всех функциях и второй итерации не будет. Но зачем тогда цикл? Или это частный случай какой-то известной функции?


А чего в Третьих Героях ровно 10 штук? Очень легко можно догадаться о её назначении, если подставить имена из базы Сава в неё. :smile6:
Вернуться к началу

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

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

Сообщение AlexSpl » 22 ноя 2021, 22:17

А что такого в базе Sav'а, что могло бы придать смысл этой мусорной функции?
Вернуться к началу

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

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

Сообщение void_17 » 22 ноя 2021, 23:54

Базу от sav-a получить нереально. А ведь это помогло бы очень сильно, можно было бы мою дополнить и продолжать копировать сигнатуры и восстанавливать неисследованные типы и классы.

Сейчас самым простым будет работа в области не ИИ, а интерфейса.
(Классы типа CSprite, CSpriteFrame, Bitmap816 и др.) Там куча похожих методов и функций, подавляющее большинство из них имеет виртуальные переписываемые методы. Но я когда над базой работал, основное внимание игровой логике уделил. План так сказать, как по мне самое простое место для этого, но там тоже нюансов дофига.

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

Пред.След.

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

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

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