Тема: [x86] lemonhook
Показать сообщение отдельно

  #2  
Старый 13.08.2021, 21:55
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

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

Да-да, ещё один класс для хуков, он самый.

Особенности:
- Возможность выгрузки хука при любой ситуации, не ломая цепочку вызовов хуков.​- Трамплин передается первым аргументом в хукнутую функцию, что позволяет не создавать глобальных объектов и переменных.​- Автоматическое определение размера хука.​
Пример:

Хук CChat::AddEntry:





Код:
using
AddEntry
=
int
(
__thiscall
*
)
(
void
*
,
int
,
const
char
*
,
const
char
*
,
uint32_t
,
uint32_t
)
;
int
__fastcall
hookedAddEntry
(
void
*
ecx
,
void
*
,
AddEntry oAddEntry
,
const
char
*
text
,
const
char
*
prefix
,
uint32_t
color
,
uint32_t
prefixColor
)
{
// Do your stuff
return
oAddEntry
(
ecx
,
text
,
prefix
,
color
,
prefixColor
)
;
}
LemonHook
::
Hook _addEntryHook
{
0x64010
,
"samp"
}
;
_addEntryHook
.
install
(
hookedAddEntry
)
;


В этом примере, хукается функция класса CChat - AddEntry, находящаяся в динамической библиотеке samp.dll. На 3 строчке видно, что помимо параметров самой функции и регистра EDX, добавился так же указатель на трамплин для вызова оригинальной функции.

Source:

NIKITA / LemonHook

GitLab.com

gitlab.com

Используйте код из примеров и получите UB и ошибки компиляции в подарок!

__thiscall* недопустим на MSVC, но GCC позволяет.

А еще AddEntry имеет 6 параметров, а вызываешь ты его с 5 параметрами.

Хоть проверил бы код

Имена начинающиеся на _ и __ зарезервированы под нужды компилятора.

А еще лучше второму параметру дать имя, ибо компилятор можно похерить регистр неиспользуемого аргумента, он же внутри функции не нужен?(хотя в целом он не должен такие оптимизации производить над функциями у которых берется адрес, но все же -O3 на GCC(MinGW) может все похерить)
 
Ответить с цитированием