Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: Как создать плагин для HD модаДа, еще такой вопрос: когда мы пишем Хайхук, у нас тип функции и возвращаемое значение должно совпадать с оригиналом ? То есть я так понимаю, что Лохук всегда должен возвращать int, а Хайхук - в зависимости от оригинальной функции ?
|
Re: Как создать плагин для HD модаДа, хайхук должен возвращать тип, который возвращает оригинальная функция, только соглашение о вызове должно быть __stdcall. Но если в хайхуке вызывается оригинальная функция (что в общем случае необязательно), то её вызываем, используя оригинальное соглашение о вызове.
Цитата: Нужно ещё отдавать приоритет отрядам не под Blind/Stone/Paralyze, иначе если топовый отряд под слепью, на него не выгодно вешать Slow, например (это нужно делать только в том случае, если других вариантов не остаётся). Последний раз редактировалось AlexSpl 25 май 2021, 15:31, всего редактировалось 2 раз(а).
|
Re: Как создать плагин для HD модаА эта штука 0x524B70 ведь на самом деле int возвращает, что бы там декомпилятор не писал ?
|
Re: Как создать плагин для HD модаДа. Декомпилятор и определяет как int. Это с воговской базой он не в ладах
|
Re: Как создать плагин для HD модаAlexSpl писал(а): Ну да, и это бы желательно учесть. Справитесь? |
Re: Как создать плагин для HD модаЦитата: А что там справляться? Поправить функцию и сделать один вектор из двух отсортированных (первая часть - отряды не под Blind/Stone/Paralyze, вторая - отряды под этими заклинаниями). |
Re: Как создать плагин для HD модаAlexSpl писал(а): Поправьте тогда, пжл, эту функцию, как будет время. |
Re: Как создать плагин для HD модаОК, но позже. Вы бы могли и сами Просто измените условие ( отряд_не_находится_под_действием_заклинания_Spell ) на ( ударное_заклинание И отряд_не_находится_под_действием_заклинания_Spell ). Всё точно так же, как Вы предложили для Forgetfulness.
|
Re: Как создать плагин для HD модаBen80 писал(а): Немного информации о ХайХуках: baratorch писал(а): SPLICE_ - на саму функцию. CALL_ - на ее конкретный явный вызов (call 0xAABBCC или call dword ptr [0xAABBCC]) FUNCPTR_ - на указатель, т.е. например на позицию в виртуальной таблице или таблице импорта, или на колбэк, передаваемый аргуменом в другую функцию). SLPICE_ - используется если нам всегда и везде нужно измененное поведение функции, откуда бы она ни вызывалась. СALL_ - если нам нужно измененное поведение функции только в этом конкретном вызове. FUNCPTR_ чаще применяется когда по-другому функцию не захучить (функция из таблицы импорта) если мы ставим FUNCPTR_ хук на функцию из таблицы импорта, то в рамках игры получается тот же эффект, что от SPLICE_ хука. Если поставим FUNCPTR_ хук на функцию в виртуальной таблице, то наша измененная функция будет вызываться только тем объектом - чья виртуальная таблица. Хотя сама функция при этом может входить в другие виртуальные таблицы других объектов, и на их поведение наш FUNCPTR_ хук уже влиять не будет. Используя высокоуровневый хук, мы заставляем игру вызывать вместо ее функции - нашу. Наша функция при этом имеет (должна иметь) тот же интерфейс что и оригинальная, т.е. тот же возвращаемый тип и те же аргументы. Здесь мы совершенно не запариваемся ни о каких низкоуровневых вещах - содержимом регистров и состоянием стэка, и т.п. Нам совершенно не нужно знать ассемблерный контекст вызова. Поэтому я назвал этот тип Хука - высокоуровневым. LoHook - это, соответственно, "низкоуровневый" хук. Его мы можем поставить вообще на любое место в коде. При этом мы получаем возможность работать с регистрами процессора как с переменными, используя их в нашем (допустим С++) коде и можем менять адрес возврата. LoHook - гораздо более мощный и универсальный инструмент, в сравнение с HiHook'ом. Им можно решать любые задачи (даже те что решают SPLICE_ и CALL_ хайхуки). Но я в HD использую в основном именно ХайХуки - ибо с ними код гораздо более читаемый, удобный для правок, безопасный и минимально конфликтен с другими модификациями. ЛоуХуки стараюсь использовать как можно меньше. Я их использую в крайних случаях, когда это максимально эффективно (в плане объема работ и скорости внедрения изменений). © https://forum.df2.ru/index.php?s=&showt ... t&p=731416 |
Re: Как создать плагин для HD модаПочему если "сёрфить" функции в декомпиляторе IDA, иногда при возвращении на изначальную функцию аргументы функции заменяются либо дополняются на какие-то странные, а в коде функции добавляются какие-то странные команды, которых изначально не было, либо они были неполноценными. К тому же еще меняется соглашение о вызове, что вообще сбивает с толку. Отсюда вопрос: какой "версии" этой функции верить? (Мне для нее хайхук нужно сделать)
И вообще, как понять, выражение параметр@<регистр> ? В чем его смысл? Пример: |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1