x86栈帧布局简记

x86栈帧布局简记
2008-01-24 01:27

       虽然不用汇编做开发,但在C/C++中定位一些core问题时需要查看堆栈结构,所以对堆栈布局要有一个基本的了解,但长期不接触就又忘了,因此在这里做个简记,以备用到的时候可以快速记起。

当函数P调用函数Q时,Q的参数是放在P的帧中的,且P中的下一条指令地址将被压入栈中,形成P的栈帧的末尾。Q的栈帧从保存帧指针的位置开始,后面开始保存其他寄存器的值。大多数信息的访问都是相对于帧指针(%ebp)的。如果函数要返回整数或指针的话,常用寄存器%eax来保存返回值。
在x86平台下,根据惯例,寄存器%eax、%edx、%ecx被划分为调用者保存。当函数P(调用者)调用Q(被调用者)时,Q可以覆盖这些寄存器的值,而不会破坏任何P所需要的数据。另外,%ebx、%esi、%edi、%ebp被划分为被调用者保存,这意味着Q必须在覆盖他们之前,将这些寄存器的值保存到栈中,并在返回前恢复他们。

 

类别:默认分类 | | 添加到搜藏 | 分享到i贴吧 | 浏览( 128) | 评论 (0)
登录后,您就出现在这里。 
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值