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


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

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

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

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

Сообщение void_17 » 10 дек 2021, 14:45

Как удалить кнопку (интерфейса), чтобы от нее следа не осталось? Пытаюсь убрать вызов конструктора, вылет. Там еще векторы какие-то, я абсолютно за интерфейс не шарю..
Вернуться к началу

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 » 10 дек 2021, 14:50

Аналогично. Интерфейс не моё. Когда надо, разбираюсь со скрипом. Но совершенно точно могу сказать, что избавление от конструктора не решит проблему. А чтобы сказать что-то точнее, нужно понимать, о какой кнопке идёт речь.
Вернуться к началу

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

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

Сообщение void_17 » 11 дек 2021, 05:23

AlexSpl писал(а):

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


Разобрал еще один NWC-шный шаблон. Осталось еще парочку
Код: Выделить всё
template <class TClass>
class TAutoArrayPtr {
public:

   TAutoArrayPtr<TClass>(/*TAutoArrayPtr<TClass> *this, */TClass *data)
   {
     this->status = 1 - (!data);
     this->data = data;
     return this;
   }

   ~TAutoArrayPtr<TClass>(/* TAutoArrayPtr<TClass> *this */)
   {
  if (!this->status)
    delete(this->data);
   }

   TClass * TAutoArrayPtr<TClass>::release(/* TAutoArrayPtr<TClass> *this */)
   {
  this->status = 0;
  return this->data;
   }
   
   TAutoArrayPtr<TClass> *   operator=(TAutoArrayPtr<TClass> *other)
   {
     TClass *l_release;

     if (this != other) {
       if (this->data == other->data) {
         if (other->status) {
           this->status = 1;
         }
       }
       else {
         if (this->status) {
           delete this->data;
         }
         this->status = other->status;
       }
       l_release = (TClass *)TAutoArrayPtr<TClass>::release(other);
       this->data = l_release;
     }
     return this;
   }

   TClass * TAutoArrayPtr<TClass>::get(/* TAutoArrayPtr<TClass> *this */)
   {
  return this->data;
   }

public:

   int status;   // +0
   TClass* data; // +4

};
Вернуться к началу

offlineigrik  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 14 сен 2017, 12:35
Пол: Не указан
Поблагодарили: 84 раз.

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

Сообщение igrik » 13 дек 2021, 15:52

void_17 писал(а):

Как удалить кнопку (интерфейса), чтобы от нее следа не осталось? Пытаюсь убрать вызов конструктора, вылет. Там еще векторы какие-то, я абсолютно за интерфейс не шарю..

AlexSpl писал(а):

Аналогично. Интерфейс не моё. Когда надо, разбираюсь со скрипом. Но совершенно точно могу сказать, что избавление от конструктора не решит проблему. А чтобы сказать что-то точнее, нужно понимать, о какой кнопке идёт речь.

Зато я с этими интерфейсами собаку уже съел с потрохами. Удалять кнопку (да и любой другой элемент диалогов) вовсе и не нужно, достаточно просто - скрыть её.

Вылет после вызова конструктора происходит из-за того, что программисты третьих героев совершенно не позаботились почти во всех диалогах о проверке на существование элементов диалогов, т.е. для диалогов элемент с определённым ID существует по умолчанию, и точка. А удаляя конструктор, ты "заставляешь диалог" брать смещение у несуществующего элемента. Именно поэтому максимально просто и безопасно элемент (например кнопку) тупо скрыть, а не удалять конструктор.
Скрыть элемент: 0x5FED80, (_DlgItem_)this, 6, 6;
Вернуться к началу

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

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

Сообщение void_17 » 13 дек 2021, 16:42

Спасибо, но я уже давно решил эту проблему самостоятельно.
Вернуться к началу

offlineigrik  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 14 сен 2017, 12:35
Пол: Не указан
Поблагодарили: 84 раз.

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

Сообщение igrik » 14 дек 2021, 05:13

Да не за что :)

Если нужно что-то вроде шаблона по созданию диалогов, то вот исходники плагина Wog Native Dialogs (WND).
Суть плагина в том, что мне пришлось переписать с нуля все 12 воговских "неродных" диалоги на движке третьих героев. В общем это образец создания, управления и использования диалогов, так сказать.
Вернуться к началу

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

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

Сообщение void_17 » 14 дек 2021, 07:05

igrik писал(а):

Да не за что :)

Если нужно что-то вроде шаблона по созданию диалогов, то вот исходники плагина Wog Native Dialogs (WND).
Суть плагина в том, что мне пришлось переписать с нуля все 12 воговских "неродных" диалоги на движке третьих героев. В общем это образец создания, управления и использования диалогов, так сказать.


Схоронил. Спасибо!
Вернуться к началу

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

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

Сообщение void_17 » 15 дек 2021, 08:02

@AlexSpl, я прошу вас быть осторожным насчет C++ 6.0. Там include имеет различия. Например в героях 3 шаблон-класс std::bitset выглядел так: std::bitset<size_t N, typename T>. В классическом C++6.0 он выглядит как std::bitset<size_t N>, еще различия нашел в std::map, std::string, std::deque.

Кстати говоря, обновите базу и пришлите, пожалуйста.
Вернуться к началу

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

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

Сообщение void_17 » 16 дек 2021, 09:38

@AlexSPL, я покопался в дримкастном экзешнике и обнаружил некоторые оригинальные названия полей структур и классов; возможно даже названия аргументов некоторых функций. Смотрие по адресам 0x7..... - 0x8..... в hex-редакторе.

upd.: любопытно. Кажется я понял, как они хранятся здесь. Вот, похоже, класс army: видно оригинальные имена полей и их смещение. Выявил закономерность:
Код: Выделить всё
X...Y..НАЗВАНИЕ_ПОЛЯ....X...Y... и т.д.
где Y - смещение


Звучит вполне себе логично: 't' = 116, 'x' = 120, 'l' = 124 и т.д. Еще бы понять, для чего три точки и X перед Y. Где-то @, где-то t, где-то еще что-то.


Изображение
Последний раз редактировалось void_17 16 дек 2021, 11:58, всего редактировалось 1 раз.
Вернуться к началу

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

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

Сообщение void_17 » 16 дек 2021, 11:46

Чтобы понять закономерность, запилил 32-битный .exe-шник в режиме дебага. Создал класс с разными полями, разными методами, разными спецификаторами доступа. (выравнивание по 4)
Изображение
Создал объект внутри WinMain(). Открыл .pdb файл в hex-редакторе, нашел название поля. Вуаля. Что интересно, за ними идут еще методы класса, в незаманглерном виде.
Изображение
Итак. Здесь немножечко по-другому, буквально на один байт, но суть точно та же(квадратные скобки - байты):
Код: Выделить всё
[X] [] [] [] [Y] [] [и][м][я][_][п][о][л][я]
где X - тип,
Y - смещение.


Пришел к выводу, что спецификатор доступа на символ X не влияет. Это значит, что public: int ... и private: int шифруются одинаково!
Что в итоге(внимание, в данном конкретном примере, в героях 3 дримкаст по-другому):
Тип Код
int 0x74
bool 0x30
short 0x11
class по-разному.

Осталось спросить на форуме Microsoft принцип шифрования типов в линкере и у нас по-сути есть оригинальные типы RoE с названиями и типами! :smile21:

Кстати говоря, enum тоже хранятся в экзешнике, с названиями и значениями. Чуть позже изучу принцип их хранения в базе данных программы.
Вернуться к началу

Пред.След.

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

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

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

cron