Как подключить функции __usercall, __userpurge (__spoils)? - PullRequest
2 голосов
/ 04 ноября 2010

Кто-нибудь знает что-нибудь о подключении __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 ]

5 голосов
/ 04 ноября 2010

Используйте обертку, которая преобразует ее в __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
}}
2 голосов
/ 05 ноября 2010

Когда все остальное терпит неудачу ... пройдитесь по нему с помощью отладчика.

В частности, обратите внимание на них, например, ESP, при входе в вызов, а затем снова перед тем, как функция вернется.

...