调用函数的具体过程(&什么是eip)整理 love

win32 api的函数调用方式是stdcall。

具体调用方式是 先按照从右至左的顺序将函数的参数压入堆栈,然后函数的下一条指令的地址入栈,返回地址(eip),接着是用来寻址局部变量的寄存器入栈(ebp),然后再将函数中的局部变量压入堆栈,接着就执行函数内部的操作了。执行完成函数要返回时,要将堆栈进行恢复,然后ret指令取栈顶的返回地址(eip)并跳到那里去执行,也就是执行函数调用完成后的操作 。
 c/c++ 的函数调用方式是_cdecl ,_cdecl只不过是在函数完成后清栈是由调用者完成的。
另外还有pascal fastcall 调用方式,不过都大同小异了~~

原文地址:https://www.cnblogs.com/windbg/p/1488916.html