码迷,mamicode.com
首页 > 其他好文 > 详细

函数调用的细节实现

时间:2015-12-13 21:48:10      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

函数调用的细节实现

这个问题当时感觉答得还可以,不过很多细节记不清晰了。所以下面反汇编一段小程序,进行分析,因为我比较熟悉的是arm汇编,所以我选择了一台安装了交叉工具链的ubuntu,而没有使用之前的centos。所以可能画风会有些不同。

下图是我写了一个简单的程序和makefile。程序中是由main函数调用fun()函数。

技术分享 

编译程序,生成可执行文件,并对其进行反汇编,将反汇编之后的信息写入dump文件,打开dump文件,分析其中的关键源码。

技术分享 

可以看出函数调用的过程如下:

1.传递参数,如果参数小于四个,则使用R0-R3 4个寄存器传递,多余4个的通过压栈传输,而压栈选择压变量e而不是选择压变量a,则说明了压栈是从右向左的。

2.使用跳转指令,跳转到相应的函数段。

3.增加栈帧,保存现在的栈基址指针fp,然后重新给栈基址指针fp和栈顶指针sp赋予新值。

4.将通过寄存器传递进来的参数保存入栈。





函数调用的细节实现

标签:

原文地址:http://www.cnblogs.com/dchipnau/p/5043581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!