读书人

X86/Win32函数调用轨范研究

发布时间: 2013-03-14 10:33:15 作者: rapoo

X86/Win32函数调用规范研究

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

X86/Win32函数调用轨范研究


二、C语言函数如下:


X86/Win32函数调用轨范研究


四、解释如下:

X86/Win32函数调用轨范研究

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的位置。


读书人网 >移动开发

热点推荐