Перезапись хуков

Tema05

Известный
Автор темы
1,506
471
Я хочу при помощи мемвраппера хукнуть CNetGame::ShutdownForRestart. Прототип "void(__thiscall*)(CNetGame*)", адрес samp+0xA1E0 для R3. Посмотрев через чит энжин этот адрес я увидел, что там уже стоит джамп хук от лаучеровского плагина libcef.asi.

1) Как быть в данной ситуации если я хочу сохранить оба хука? Я не планирую нопать метод, а лишь выполнить другое действие при его вызове
2) Первое что мне приходит в голову это читать из памяти конечный адрес функции в libcef.asi и использовать его для своего хука. Но в зависимости от названия файла моего плагина он может загружаться позже или раньше libcef.asi, а в 2 случаи там ещё не будет джампа с адресом. Мне это не нравится. Ещё рассматривал вариант сразу искать адрес в libcef.asi по сигнатуре так как это файл потенциально может меняться. Но это решение мне тоже кажется не оптимальным. Как правильнее будет сделать? Мне кажется на такие случаи уже придумано оптимальное решение

1745055548277.png
1745055761201.png

1745055791304.png
 
  • Вау
Реакции: minxty

sazzas1978

Известный
139
127
Можешь отследить в хуке load library , или как то по другому, и проверить загрузку libcef, потом поставить хук на начало оригинальной функции, и вызвать в конце функцию которая вызывается в хуке (адрес куда идёт jmp хук от libcef).
 
Последнее редактирование:

Tema05

Известный
Автор темы
1,506
471
эта функция в принципе вызывается лишь в двух случаях на р3

Посмотреть вложение 268190
Дык её могут вызывать вообще любые другие скрипты и плагины, что у человека есть в сборке. Как минимум 2 скрипта лаунчера могут это делать. Реконнект у каждого 2 стоит, он тоже её триггерит. Мне нужно в целом отследить любые переподключения к серверу неважно по какой причине и чем инициированы.

Про срабатывание 1 раз я имел ввиду хук. Т.е. только при первом вызове ShutdownForRestart мой хук срабатывает. При последующих вызовах ShutdownForRestart мой хук не срабатывает
 

sazzas1978

Известный
139
127
Дык её могут вызывать вообще любые другие скрипты и плагины, что у человека есть в сборке. Как минимум 2 скрипта лаунчера могут это делать. Реконнект у каждого 2 стоит, он тоже её триггерит. Мне нужно в целом отследить любые переподключения к серверу неважно по какой причине и чем инициированы.

Про срабатывание 1 раз я имел ввиду хук. Т.е. только при первом вызове ShutdownForRestart мой хук срабатывает. При последующих вызовах ShutdownForRestart мой хук не срабатывает
Попробуй после вызова своего хука вызвать следующею функцию в которую идёт jump от libcef
 

Похожие темы

  1. У
    • Закрыта
    • Опрос
      • Нравится
    Ответы
    10
    Просмотры
    4K
    • Закреплено
    • Статья
    Ответы
    205
    Просмотры
    755K