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


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

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

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

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

Сообщение RoseKavalier » 18 дек 2021, 15:04

Good job!

...but this doesn't quite match up with Hero in SoD exe, have to be careful due to different architecture and presumably some changes.
Probably worth noting when a symbol is not original with a comment too, as those tend to be wrong, e.g. ID and id are not correct.
Вернуться к началу

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

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

Сообщение void_17 » 18 дек 2021, 16:03

RoseKavalier писал(а):

Good job!

...but this doesn't quite match up with Hero in SoD exe, have to be careful due to different architecture and presumably some changes.
Probably worth noting when a symbol is not original with a comment too, as those tend to be wrong, e.g. ID and id are not correct.

About 90% of this fits well. I think this is enough for modding purposes.
By the way, there was only one field known as "id" but SoD has two. For current no idea what's the difference, gotta check this in IDA a bit later.
Последний раз редактировалось void_17 18 дек 2021, 16:09, всего редактировалось 1 раз.
Вернуться к началу

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

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

Сообщение void_17 » 18 дек 2021, 16:07

advManager наверное самый сложный для разбора класс. Я серьезно сейчас. Там все поперемешано, поля в RoE в другом порядке и вооьще они отличаются на 8 байт, что настараживает еще больше. Буду пытаться вручную все разбирать, копаясь в дизассемблере.
Вернуться к началу

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

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

Сообщение Херомант » 18 дек 2021, 19:15

void_17 писал(а):

advManager наверное самый сложный для разбора класс. Я серьезно сейчас. Там все поперемешано, поля в RoE в другом порядке и вооьще они отличаются на 8 байт, что настараживает еще больше. Буду пытаться вручную все разбирать, копаясь в дизассемблере.


Далеко не самый сложный. ERA+ переносит половину advManager-а, если что... А разница в 8 байт вполне объяснима RoE (кто не знает, в Клинке были добавлены 2 новых класса героя, т.е. +8 байт к advManager, а ERA+ ещё солиднее увеличивает размер этого менеджера).
Вернуться к началу

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

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

Сообщение RoseKavalier » 18 дек 2021, 20:28

void_17 писал(а):

RoseKavalier писал(а):

Good job!

...but this doesn't quite match up with Hero in SoD exe, have to be careful due to different architecture and presumably some changes.
Probably worth noting when a symbol is not original with a comment too, as those tend to be wrong, e.g. ID and id are not correct.

About 90% of this fits well. I think this is enough for modding purposes.
By the way, there was only one field known as "id" but SoD has two. For current no idea what's the difference, gotta check this in IDA a bit later.


Oh definitely it fits well - but for modding purposes it has to be 100% the same.
For rewriting purposes, you first need to write it as a mod by replacing routines with your own in order to be certain you are correctly rewriting it.
Once you have fully hooked everything, you can instead create an executable and remove required crutches like #pragma pack(1), hardcoded arrays, magic constants...
Just my $0.02.
Вернуться к началу

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

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

Сообщение void_17 » 30 дек 2021, 11:54

https://github.com/frida/stlport/tree/master/stlport

Версия STL, которая используется в Dreamcast-RoE версии игры.
Отличий от оригинального STL C++98 придостаточно. Первое, что в глаза бросается - размер std::vector - 12 байт!
Вернуться к началу

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 » 30 дек 2021, 13:58

Цитата:
Отличий от оригинального STL C++98 придостаточно. Первое, что в глаза бросается - размер std::vector - 12 байт!

Почему 12? Был же 16. И сейчас 16, если убрать дебаг итераторов (аллокатор и три указателя, выравнивание 4).
Вернуться к началу

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

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

Сообщение void_17 » 30 дек 2021, 15:58

В STLport обычный std::vector< class _Tp, class _Alloc > выглядит так:
Код: Выделить всё
_Tp *_M_start;
_Tp *_M_finish;
_AllocProxy _M_end_of_storage;

Смотрите строки 107, 108, 109:
https://github.com/frida/stlport/blob/m ... ort/vector

Тоесть он однозачно отличается от обычного STL-ного std::vector.
Если посмотрите в дамп, то увидите, что это действительно так. Везде std::vector имеет размер 12 байт (кроме std::vector<bool>, он 20 байт).

З.Ы.:
Погуглил что такое вообще этот STLport и с чем его едят.
Оказывается, что это версия STL для кроссплатформерных проектов.
Там много отличий...
Вернуться к началу

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 » 30 дек 2021, 16:24

Странно. А как тогда объяснить

Код: Выделить всё
std::vector bound_armies;
std::vector binder;
std::vector aura_clients;
std::vector aura_sources;

в army? Эти по 16 байт. См. поля, начиная с 0x4F4.

Я думаю, Герои 3 написаны в 6-й студии (хотя, может быть, и в 5-й, но для STL почти нет разницы), а там вектор 16 байт (4 уходит на аллокатор). Если прописать

Код: Выделить всё
#define _SECURE_SCL 0
#define _HAS_ITERATOR_DEBUGGING 0

то std::vector 2008-й студии отлично накладывается на вектор в Героях 3. И это работает.

Кстати, я уже писал об этом в этой теме: ещё std::deque из 5-й студии отлично накладывается на очередь заклинаний (TSpellQueue). А вот от 2008-й студии уже не подойдёт, как ни крути.
Вернуться к началу

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

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

Сообщение void_17 » 30 дек 2021, 16:40

Вы меня не поняли. В пк версии героев std::vector и вправда 16 байт, я не спорю. Дримкаст версия игры скомпилирована с использованием stlport, в котором std::vector 12 байт. Можете проверить в дримкаст базе Ghidra или в дампе.
Последний раз редактировалось void_17 30 дек 2021, 16:41, всего редактировалось 1 раз.
Вернуться к началу

Пред.След.

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

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

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