发布网友 发布时间:2022-04-22 08:06
共2个回答
热心网友 时间:2022-06-18 07:32
参数传递规则要根据函数遵循的调用约定而定,不同的调用约定(stdcall,C约定fast call,pascal等)其不同,也可以使用自己的约定(在你非常熟悉接口或底层做了什么的情况下),
一般【esp+4】是eip的值,如果不清楚所用约定,是尝试esp+2*4,esp+3*4等,还得注意在子程序的堆栈平衡,自己参考线调用约定的内容吧
热心网友 时间:2022-06-18 07:33
C:
int i=4:
foo(i) 或者foo(4);
假设 foo的功能是 返回 i+20
foo(4);的汇编代码是
asm:
push4
call_foo
add esp, 4
foo的实现是:
asm:
_foo proc
push ebp;
mov ebp,esp;
mov eax,ebp[0x08];
add eax,0x14
pop ebp
ret
end proc
除非特别说明,或者编译选项里另外设置;
C函数都是cdecl,也就是C调用约定
C++通常都是stdcall,也就是标准调用约定