난 __usercall 함수 아래의 포장을 필요로 _ 으로 cdecl/ _stdcall :usercall 함수에 대한 내 stdcall 래퍼가 올바 릅니까?
char __usercall sub_4017B0<al>(int a1<ebx>, int a2)
A1은 정수, A2 실제로하는 int이 배열이다 ("INT 인수 [10])
이 올바른지? sub_4017B0 뒤에있는 <al>
의 의미는 무엇입니까?
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);
이 표준이 없기 때문에 컴파일러, 버전, 플랫폼, 모든 세부 정보를 지정하는 것이 좋습니다. –
Windows 7 32 비트, MinGW g ++ (최신 안정) 또는 Visual C++ 2008 –
왜 C 대신 어셈블리에서 래퍼를 작성하겠습니까? "잘못된"규칙에 따라 함수를 호출하는 적절한 서명을 사용하여 새 함수를 작성할 수 있습니다. – sharptooth