Berserker
Posts: 16624
|
XEPOMAHT, всё это чёрная магия к костылями )
Хуки делятся на 2 типа: call команда прямо в месте установки или jmp в начале функции.
Вторая — это высокоуровневая замена всей оригинальной функции.
Обработчики перехватов соответственно тоже бывают двух типов: первые получают указатель на контекст (регистры, адрес возврата на момент вызова хука) и возвращают флаг того, нужно ли выполнить затёртый код. Второй тип обработчиков — это новая реализация функции. У них stdcall соглашение и все те же аргументы, что и у оригинальной функции, но первый аргумент — адрес моста к оригинальной функции, то есть как бы адрес оригинальной функции, который можно использовать для её вызова.
Все мосты создаются автоматически с использованием движка дизассемблера, расчётом корректных областей для nop, с заменой коротких прыжков на длинные в перезаписанных командах и т.д.
Ассемблер здесь не помеха. Я скоро выпущу 3.9.16 с изменённым исправленным HookCode. Тебе двух функций HookCode/Splice хватило бы почти на все нужды, при том, что они умеют строить мосты и выполнять затёртый код. У меня такое ощущение, что автор плагина не знал, как это сделать корректно и потому влез внутрь поста splice-перехвата Эры. А нужно было всего-то установить другой Splice перехват поверх оригинального. В этом и высокоуровневость, что одну и ту же функцию, можно перехватить несчётное количество раз.
В общем, не стесняйтесь детально спрашивать, ибо костыли потом аукаются всем )
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
08.08.2024 14:32 |
|