Тема: [C++] Custom Hooks
Показать сообщение отдельно

  #6  
Старый 15.02.2019, 22:06
ЯedЯuM
Участник форума
Регистрация: 13.03.2016
Сообщений: 242
С нами: 5351007

Репутация: 0
По умолчанию

Цитата:
Сообщение от Stiopko  

А для чего нужен пролог?
Пролог это начало функции (push ebp, mov ebp, esp и тд), Эпилог её конец(перед возвратом).

Само понятие на сколько знаю пришло из ассемблера.

Просто если поставить хук, на прыжок требуется 5 байт, в вин апи почти в каждой стоит в самом начале инструкция mov edi, edi и вместе с push ebp, mov ebp, esp код как раз столько же и весит. А в случае с пользовательскими функциями к примеру, после mov ebp, esp может не быть инструкции размером в два байта, в итоге получится что хук затрёт два байта от той инструкции и она разобьется на другой код который будет уже не валид, возврат трамплином в такой код спровоцирует краш, вот почему нужно учитывать размер пролога функции, потому что инструкции push ebp, mov ebp, esp весят только 3 байта чего не достаточно для jmp инструкции прыжка на хук.

@Stiopko вот пример с пояснением как знать сколько байт указывать в размер пролога



Нам нужно занопить лишний байт, по этому указываем размер хука в 6 байт и тот байт 08 переставит на 90 (nop - ничего не делающая инструкция).



А вот наглядный пример для чего нужен трамплин а он нужен не только для возврата в оригинальную функцию.

 
Ответить с цитированием