Объявления

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

Улучшение ИИ

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 07 май 2020, 16:00

Вопрос знатокам - почему попытки менять с помощью патчера локальные переменные в стеке всегда приводят к крашам ?

Вообще, всегда интересовал этот вопрос, конечно, со временем приспособился к этому обстоятельству. Но сейчас этот вопрос опять возник. Я пытаюсь изменить число, загружаемое в FPU средствами Ассемблера (ассемблерный хук). Это получается, используя глобальные константы в различных областях кода. Однако мне интересно обойтись без этого. Для этого я решил использовать локальные переменные - добавляю свою локальную переменную. И работает так, как задумано. Однако вскоре (далее в самой функции или при выходе из функции) происходит краш (а если использовать Olly, то какое-то странное зацикливание на одной инструкции - а понял, там ESI указывает на адрес памяти, равный 0).
Последний раз редактировалось Ben80 07 май 2020, 19:08, всего редактировалось 1 раз.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 07 май 2020, 18:50

Вот какие вещи происходят в ASM хуке.
У меня в хуке всего 3 инструкции (после чего идет JMP к основному коду):
Код: Выделить всё
mov dword ptr [ebp - 0x24], 0x00000000
mov dword ptr [ebp - 0x20], 0x3FF00000
fcomp qword ptr [ebp - 0x24]


В итоге - непонятный краш.

Изображение

Изображение
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение RoseKavalier » 07 май 2020, 19:59

Difficult to tell anything without all the code, honestly...

Alternatively you could just declare a const double in your codebase and pi->WriteDword(0x4A74A0+2, &myDouble);
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 07 май 2020, 20:26

Что-то начало проясняться. Для создания своих локальных переменных нужно еще зарезервировать место в начале функции
Код: Выделить всё
sub esp, N


То есть в моем случае
Код: Выделить всё
_PI->WriteByte(0x4A73B5, 0x14);
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 07 май 2020, 20:30

RoseKavalier писал(а):

Difficult to tell anything without all the code, honestly...

Alternatively you could just declare a const double in your codebase and pi->WriteDword(0x4A74A0+2, &myDouble);


Thanks. And &myDouble will always 4 byte size ?
Последний раз редактировалось Ben80 07 май 2020, 20:45, всего редактировалось 1 раз.
Вернуться к началу

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: Улучшение ИИ

Сообщение AlexSpl » 07 май 2020, 20:33

Цитата:
Что-то начало проясняться. Для создания своих локальных переменных нужно еще зарезервировать место в начале функции

Для этого в прологе и существует команда sub esp, ... Плюс почистить стек нужно за собой: __thiscall/__fastcall/__stdcall - retn ..., __cdecl - add esp, ... после вызова функции (так, это если передаёте свои дополнительные аргументы; для локальных переменных достаточно первого).

float - 4 байта, double - 8.
Последний раз редактировалось AlexSpl 07 май 2020, 20:54, всего редактировалось 2 раз(а).
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 07 май 2020, 20:35

Но остается другой вопрос:

Почему попытки менять с помощью патчера локальные переменные в стеке всегда приводят к крашам ?

Не может же быть, что только я постоянно с этим сталкивался. Правда, раньше я использовал старую версию патчера 2.8
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 07 май 2020, 20:37

AlexSpl А стек то зачем самому чистить ? Ведь перед ret выполянется копирование mov esp, ebp. А retn чистит только аргументы, переданные в функцию при ее вызове - нет необходимости чистить локальные переменные. Или я неправ ?
Вернуться к началу

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: Улучшение ИИ

Сообщение AlexSpl » 07 май 2020, 20:39

Цитата:
А стек то зачем самому чистить ?

Выше поправил. Это если ты добавляешь свой аргумент.

Цитата:
Почему попытки менять с помощью патчера локальные переменные в стеке всегда приводят к крашам ?

Тут без примера сложно что-то сказать. Что-то с регистрами ebp/esp.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 07 май 2020, 20:41

Примеров я бы кучу привел. Да только давно уже не связываюсь с этим - не пытаюсь менять что-либо в [ebp - N], [ebp + N].
Вернуться к началу

Пред.След.

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

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

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