7.C语言调用帧结构
来源:互联网 发布:品类经营数据 编辑:程序博客网 时间:2024/06/15 01:45
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指令:从过程调用中返回。指的是从栈中弹出地址,并跳转到这个位置
- 7.C语言调用帧结构
- 浅谈C语言中的函数调用方式-----栈帧结构
- C语言函数调用时的栈帧结构变化
- C语言程序函数调用栈帧结构
- 函数调用和返回过程栈帧结构变化图(C语言举例)
- C语言结构体指针在函数调用中的使用
- c语言中,结构体做参数调用例子结构体形参例子
- C语言中的结构
- C语言结构体
- C语言:结构体
- C语言字段结构
- C语言:结构体
- C语言语句结构
- C语言进程结构
- C语言中的-------结构
- C语言程序控制结构
- C语言--结构体
- c语言结构体
- 6.C语言控制结构的汇编表示
- 深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝
- 支持向量机学习之2:核函数
- 判断浏览器版本
- 将博文搬迁至博客园
- 7.C语言调用帧结构
- 电脑从业人员不得不知的dos命令(1)
- PHP文件读写操作之文件写入代码
- 文件隐藏于图片
- Android学习笔记(三)--ListView与RecyclerView
- Another app is currently holding the yum lock; waiting for it to exit...
- b
- 智慧xxx项目记录(二)进入内容页和侧边栏绘制
- AES128比特10轮密钥编排方案