/*
* Wrapper from
* int func(int a, int b, int c, unsigned int d, signed int e);
* to
* int __usercall func<eax>(int a<eax>, int b<ecx>, int c, unsigned int d, signed int e);
*/
int func(int a, int b, int c, unsigned int d, signed int e)
{
__asm
{
push e
push d
push c
mov ecx, b
mov eax, a
call __usercall_func // access violation somewhere inside here
add esp, 12
}
}
/* * Wrapper from * int func(int a, int b, int c, unsigned int
Share
You cannot perform
retyourself from within an inline asm block, because you don’t know what the outer function has done with the stack pointer. Instead you need to arrange for the assembly code to leave the return value in a local variable, which the wrapper function can return with the normal Creturnstatement.You also probably need to fix the stack pointer after the return from
__usercall_func, unless it uses a perverse calling convention where it pops its own parameters off the stack.