浅谈对栈帧的理解
来源:互联网 发布:windows声音设置 编辑:程序博客网 时间:2024/05/17 06:03
首先说明,栈帧的作用是函数调用时的过程记录,它存储在用户的栈上。
了解栈帧的时候我们需要知道的知识:
EBP:基址寄存器
ESP:栈顶寄存器
EIP:指令寄存器
汇编语言知识:mov:把数据放到地址里。 call:默认将下一条指令地址压入栈中。ret:弹出栈顶地址,放在eip寄存器中;push:压变量入栈;pc指针:程序计数器,永远指向指令的下一条指令。
接下来我们来看看栈帧的结构:
栈帧主要作用是控制和保存一个过程中的所有信息。
来看一段代码:
#include<stdio.h>int add(int x,int y){int z=0;z=x+y;return z;}int main(){int a=10;int b=20;int ret=add(a,b);printf("ret=%d",ret);return 0;}
在函数最开始执行的是main函数,那么此时先为main函数开辟存储空间,且ebp指向栈底,esp指向栈顶,看上图,在main函数栈帧中,定义并初始化a,b,实际上就是把一个值放到内存中去,中间需要用到mov指令,分别为a,b开辟空间,在fun函数栈帧中,调用函数时,变量是已经创建好的,这里强调参数实例化,是从右到左mov的,故b先入栈。
把a,b形参push进栈后,开始执行call指令。
阅读全文
0 0
- 浅谈对栈帧的理解
- 浅谈对rss的理解
- 浅谈对Window的理解
- 浅谈对ActiveMQ的理解
- 浅谈对this的理解
- 浅谈对spring的理解
- 浅谈对spark的理解
- 浅谈对Context的理解
- 浅谈对handle的理解
- 浅谈对DHCP的理解
- 浅谈对软件工程的理解
- 浅谈创业者对品牌的理解误区
- 浅谈 “我对 HOOKPE 的理解”
- 浅谈对C语言指针的理解
- 浅谈对fork函数的理解
- 浅谈我对框架的理解
- 浅谈对委托的理解--c#
- [黑马程序员]浅谈对'对象'的理解
- op输入失调电压
- LeetCode 95. Unique Binary Search Trees II&96. Unique Binary Search Trees--动态规划,二叉树
- centos 7 安装gcc6.2编译器
- controller或者service层调用配置文件里的属性
- Codeforces 700E Cool Slogans 后缀数组+线段树
- 浅谈对栈帧的理解
- 8
- 学习笔记--斜率优化
- 未指定的错误,异常详细信息: System.Exception: 未指定的错误
- PyTorch笔记3-分类
- Python里直接开发cad
- Java套接字编程---TCP
- 算法课作业系列8——Knight Probability in Chessboard
- 实现基于LVS负载均衡集群的电商网站架构