2,640
社区成员
发帖
与我相关
我的任务
分享
标准的C 函数调用方式.其过程是:
1) 调用方把参数反序的压入堆栈中。
2) 调用函数。
3) 调用方把堆栈复原。
被调用函数需要做以下一些事情:
1) 保存ebp. ebp 用来保存这个函数执行之前的esp 。执行完毕之后,ebp 恢复esp.
push ebp
2) 保存esp 到ebp 中。
mov ebp,esp
3) 在栈中腾出一个区域用来申请局部变量。
sub esp, xxh
4) 保存寄存器值到堆栈中。调用完后恢复
push ebx
push esi
push edi
...
5) 在函数中。参数的获取是ebp+8 字节为第一个参数,ebp+12 为第二个参数,依次增加。ebp+4 字节处是要返回的地址。
6) 恢复ebx,esi,edi ,esp,ebp,最后返回。
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret