如何挂钩__usercall,__ userpurge(__spoils)函数?

时间:2010-11-04 16:45:42

标签: c hook reverse-engineering detours usercall

知道任何关于挂钩__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 个答案:

答案 0 :(得分:5)

使用包装器将其转换为__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
}}

答案 1 :(得分:2)

当其他所有方法都失败时......使用调试器遍历它。

特别注意这些,就像输入电话时的ESP一样,然后在函数返回之前再次注意..