7.C语言调用帧结构

7.C语言调用帧结构

IA32程序用程序栈来支持过程调用。它包括将数据(参数和返回值)和控制从代码的一部分传到另一部分,另外还包括进入时为过程的局部变量分配空间,并在退出时释放空间。一般地,机器只提供转移控制到过程和从过程中转移出控制的简单指令,数据传递、局部变量的分配和释放必然通过程序栈实现

机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复和本地存储。我们称为单个过程分配的那部分栈为栈帧。按前面的介绍,栈指针%esp可以移动,帧指针%esp不变化,因而大多数信息的访问都是相对于帧指针的。

 支持过程调用和返回的指令

call指令:目标是指明被调用过程起始的指令地址。同跳转一样,调用可是直接的(一个标号),也可是间接的(*后加一个操作数指示符)。其效果是:将返回地址入栈,并跳转到被调用过程(P调用Q,P调用者,Q被调用者)的第一条指令处。 所谓返回地址是指在程序中紧跟call后面的那条指令的地址,这样当被调用过程返回时,执行会从此处继续。

leave指令:为返回准备栈,它等价于如下代码:

movl %ebp,%esp

popl %ebp //恢复已保存的%ebp寄存器

ret指令:从过程调用中返回。指的是从栈中弹出地址,并跳转到这个位置

 


IA32程序用程序栈来支持过程调用。它包括将数据(参数和返回值)和控制从代码的一部分传到另一部分,另外还包括进入时为过程的局部变量分配空间,并在退出时释放空间。一般地,机器只提供转移控制到过程和从过程中转移出控制的简单指令,数据传递、局部变量的分配和释放必然通过程序栈实现

机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复和本地存储。我们称为单个过程分配的那部分栈为栈帧。按前面的介绍,栈指针%esp可以移动,帧指针%esp不变化,因而大多数信息的访问都是相对于帧指针的。

 支持过程调用和返回的指令

call指令:目标是指明被调用过程起始的指令地址。同跳转一样,调用可是直接的(一个标号),也可是间接的(*后加一个操作数指示符)。其效果是:将返回地址入栈,并跳转到被调用过程(P调用Q,P调用者,Q被调用者)的第一条指令处。 所谓返回地址是指在程序中紧跟call后面的那条指令的地址,这样当被调用过程返回时,执行会从此处继续。

leave指令:为返回准备栈,它等价于如下代码:

movl %ebp,%esp

popl %ebp //恢复已保存的%ebp寄存器

ret指令:从过程调用中返回。指的是从栈中弹出地址,并跳转到这个位置

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值