你的分享就是我们的动力 ---﹥

X86/Win32函数调用规范研究

时间:2013-03-14 11:31来源:www.chengxuyuans.com 点击:

一、函数调用总体框图如下:                          

              


二、C语言函数如下:


         


四、解释如下:

         

       1、程序把esp的老值先压入堆栈,然后把esp赋值给ebp,ebp不变,esp变化。

       2、esp=esp-12,这样做是为了放入局部变量。程序往ebp-4和ebp-c分别存入3和2,留ebp-8的位置存 以后计算出来的两数和。

       3、压入堆栈参数2和3,此时esp又减了8。call指令把返回地址压入堆栈。

       4、子函数先把上面的EBP的值压入堆栈,把把esp赋值给ebp,ebp不变,esp变化。

       5、又一条无效的指令把ecx压入堆栈,此时esp又减了12。用bp+8和bp+12娶到局部变量,相加后复制给eax。

       6、把ebp赋给esp,之后把上面ebp的值恢复(pop bp),ret指令把返回地址。

       7、esp=esp+8,因为调用子函数时压入了两个参数。

       8、把ebp赋给esp,之后把再上面ebp的值(图中没有显示)恢复,ret指令把返回地址。

       注:红色标注表示图中esp的位置。


转载注明地址:http://www.chengxuyuans.com/Windows Phone/52968.html