ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #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 - ничего не делающая инструкция).



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

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



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.