Как подключить функции __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, когда вы вводите вызов, а затем еще раз перед возвратом функции.

Другие вопросы по тегам