Как подключить функции __usercall, __userpurge (__spoils)?
Кто-нибудь знает что-нибудь о подключении __usercall
тип функций? Я ловлю успешно __thiscall
, __stdcall
а также __cdecl
звонки, но этого мне достаточно.
Кто-нибудь знает, как подключить библиотеку __usercall
или как подключить этот тип функций с помощью перевода к __stdcall
или же __cdecl
?
Функция, которую я должен подключить сначала:
int __usercall func<eax>(int a<eax>, int b<ecx>, int c, unsigned int d, signed int e);
2 ответа
Решение
Используйте обертку, которая преобразует его в __stdcall
,
int __stdcall func_hook_payload(int a, int b, int c, unsigned int d, signed int e);
// Wrapper for
// int __usercall func<eax>(int a<eax>, int b<ecx>, int c, unsigned int d, signed int e);
__declspec(naked) void func_hook()
{__asm{
push ebp
mov ebp, esp
push dword ptr[ebp + 0x0C] // or just push e
push dword ptr[ebp + 0x08] // d
push dword ptr[ebp + 0x04] // c
push ecx // b
push eax // a
call func_hook_payload
leave
ret // note: __usercall is cdecl-like
}}
Когда все остальное терпит неудачу.. пройти через это с отладчиком.
В частности, обратите внимание на такие, как ESP, когда вы вводите вызов, а затем еще раз перед возвратом функции.