Просмотр полной версии : urmem hook
legendabrn
01.03.2021, 18:11
крашит когда вызывается функция, в чем проблема?
Код:
urmem::hook hooks;
int sub_48C8D0(char* Format, char ArgList)
{
return hooks.call(Format, ArgList);
}
hooks.install(0x48C8D0, urmem::get_func_addr(sub_48C8D0), urmem::hook::type::call, 5);
https://forum.antichat.xyz/attachments/27681729/
C++:
urmem
::
hook hk
;
int
__cdecl
sub_48C8D0
(
char
*
format
,
char
argList
)
{
return
urmem
::
call_function
(
hk
.
get_original_addr
(
)
,
format
,
argList
)
;
}
hk
.
install
(
0x48C8D0
,
urmem
::
get_func_addr
(
&
sub_48C8D0
)
,
urmem
::
hook
::
type
::
jmp
,
5
)
;
вроде так, если это конечно не функция какого-то модуля, если это так, то надо брать от него оффсет (reinterpret_cast(GetModuleHandleA("имя модуля")) + 0x48C8D0)
legendabrn
01.03.2021, 20:15
C++:
urmem
::
hook hk
;
int
__cdecl
sub_48C8D0
(
char
*
format
,
char
argList
)
{
return
urmem
::
call_function
(
hk
.
get_original_addr
(
)
,
format
,
argList
)
;
}
hk
.
install
(
0x48C8D0
,
urmem
::
get_func_addr
(
&
sub_48C8D0
)
,
urmem
::
hook
::
type
::
jmp
,
5
)
;
вроде так, если это конечно не функция какого-то модуля, если это так, то надо брать от него оффсет (reinterpret_cast(GetModuleHandleA("имя модуля")) + 0x48C8D0)
инжектится в обычный процесс, и изменяет в самом процессе, а не в модуле
тогда пробуй то что я тебе скинул.
legendabrn
01.03.2021, 21:22
тогда пробуй то что я тебе скинул.
ты мне скинул для модуля, мне не нужен модуль
legendabrn
01.03.2021, 21:29
где
https://forum.antichat.xyz/attachments/27681897/
перечитай что я написал, я тебе написал исправленный код и написал что делать, если функция относится к какому-либо модулю, а не самому приложению.
legendabrn
01.03.2021, 21:32
перечитай что я написал, я тебе написал исправленный код и написал что делать, если функция относится к какому-либо модулю, а не самому приложению.
перечитай что я тебе написал, я инжектирую дллку в обычный процесс, моя дллка хукает функцию НЕ МОДУЛЯ, а процесса
на минхуке идеально работает, и не нужен никакой "код модуля", мне интересен принцип для юрмема на данный момент
так я тебе блять и написал код не для модуля, емае.
legendabrn
01.03.2021, 21:37
так я тебе блять и написал код не для модуля, емае.
где блин
https://forum.antichat.xyz/attachments/27681904/
https://forum.antichat.xyz/attachments/27681904/
ты хотя бы читал, что я пишу. я написал, что если функция НЕ ЯВЛЯЕТСЯ частью модуля, то ВОТ ТАК.
legendabrn
01.03.2021, 21:54
так я тебе блять и написал код не для модуля, емае.
а ок извини
не обратил внимание на код выше, думал процитировал моё сообщение и все
legendabrn
01.03.2021, 22:27
@SC6UT (https://www.blast.hk/members/406860/), а как быть с фасткаллом, сможешь привести пример?
@SC6UT (https://www.blast.hk/members/406860/), а как быть с фасткаллом, сможешь привести пример?
тебе надо хукнуть именно fastcall функцию или все же thiscall?
legendabrn
01.03.2021, 22:34
тебе надо хукнуть именно fastcall функцию или все же thiscall?
thiscall, но на минхуке использовал fastcall
thiscall, но на минхуке использовал fastcall
покажу на примере функции гташки CWeapon::Fire
bool CWeapon::Fire(CEntity *, CVector *, CVector *, CEntity *, CVector *, CVector *)
я не проверял, так как не могу сейчас, но вроде как вот так:
C++:
urmem
::
hook hkCWeapon_Fire
;
bool
__stdcall
HOOK_CWeapon_Fire
(
void
*
firingEntity
,
void
*
origin
,
void
*
muzzlePosn
,
void
*
targetEntity
,
void
*
target
,
void
*
originForDriveBy
)
{
// берем указатель на класс из регистра ecx
void
*
dis
;
__asm mov dis
,
ecx
// вызываем оригинальную функцию
return
urmem
::
call_function
(
hkCWeapon_Fire
.
get_original_addr
(
)
,
dis
,
firingEntity
,
origin
,
muzzlePosn
,
targetEntity
,
target
,
originForDriveBy
)
;
}
hkCWeapon_Fire
.
install
(
0x742300
,
urmem
::
get_func_addr
(
&
HOOK_CWeapon_Fire
)
,
urmem
::
hook
::
type
::
jmp
,
5
)
;
kin4stat
01.03.2021, 23:35
покажу на примере функции гташки CWeapon::Fire
CWeapon::Fire(CEntity *, CVector *, CVector *, CEntity *, CVector *, CVector *)
я не проверял, так как не могу сейчас, но вроде как вот так:
C++:
urmem
::
hook hkCWeapon_Fire
;
bool
__stdcall
HOOK_CWeapon_Fire
(
void
*
firingEntity
,
void
*
origin
,
void
*
muzzlePosn
,
void
*
targetEntity
,
void
*
target
,
void
*
originForDriveBy
)
{
// берем указатель на класс из регистра ecx
void
*
dis
;
__asm mov dis
,
ecx
// вызываем оригинальную функцию
return
urmem
::
call_function
(
hkCWeapon_Fire
.
get_original_addr
(
)
,
firingEntity
,
origin
,
muzzlePosn
,
targetEntity
,
target
,
originForDriveBy
)
;
}
hkCWeaponFire
.
install
(
0x742300
,
urmem
::
get_func_addr
(
&
HOOK_CWeapon_Fire
)
,
urmem
::
hook
::
type
::
jmp
,
5
)
;
не проще фастколл и EDX? да и stdcall вроде только через стек передает если это не функция класса явно объявленная как stdcall
не проще фастколл и EDX? да и stdcall вроде только через стек передает если это не функция класса явно объявленная как stdcall
а какая разница как реализовать? через аргументы получил все что идёт в стеке, а потом достал указатель на класс вручную.
kin4stat
01.03.2021, 23:40
а какая разница как реализовать? через аргументы получил все что идёт в стеке, а потом достал указатель на класс вручную.
inline asm ломает оптимизатор компилятора
inline asm ломает оптимизатор компилятора
а, понял, ну тогда действительно лучше так:
C++:
urmem
::
hook hkCWeapon_Fire
;
bool
__fastcall
HOOK_CWeapon_Fire
(
void
*
dis
,
void
*
EDX
,
void
*
firingEntity
,
void
*
origin
,
void
*
muzzlePosn
,
void
*
targetEntity
,
void
*
target
,
void
*
originForDriveBy
)
{
// вызываем оригинальную функцию
return
urmem
::
call_function
(
hkCWeapon_Fire
.
get_original_addr
(
)
,
dis
,
firingEntity
,
origin
,
muzzlePosn
,
targetEntity
,
target
,
originForDriveBy
)
;
}
hkCWeapon_Fire
.
install
(
0x742300
,
urmem
::
get_func_addr
(
&
HOOK_CWeapon_Fire
)
,
urmem
::
hook
::
type
::
jmp
,
5
)
;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot