我需要将以下 __usercall 函数包装到 _ cdecl/ _stdcall:
char __usercall sub_4017B0<al>(int a1<ebx>, int a2)
a1 是整数,a2 实际上是一个整数数组('int args[10]')
它是否正确?<al>
sub_4017B0 背后的含义是什么?
int __stdcall func_hook_payload(int callnum, int* args);
// Wrapper for
// char __usercall sub_4017B0<al>(int callnum<ebx>, int a2)
__declspec(naked) void func_hook()
{__asm{
push ebp
mov ebp, esp
push dword ptr[ebp + 0x28] // args[9]
push dword ptr[ebp + 0x24] // args[8]
push dword ptr[ebp + 0x20] // args[7]
push dword ptr[ebp + 0x1C] // args[6]
push dword ptr[ebp + 0x18] // args[5]
push dword ptr[ebp + 0x14] // args[4]
push dword ptr[ebp + 0x10] // args[3]
push dword ptr[ebp + 0x0C] // args[2]
push dword ptr[ebp + 0x08] // args[1]
push dword ptr[ebp + 0x04] // args[0]
push ebx // callnum
call func_hook_payload
leave
ret // note: __usercall is cdecl-like
}}
调用 sub_4017B0 的包装器会是什么样子?
包装器应该有这个签名:
int sub_4017B0_wrapper(int callnum, int* args);