栈帧 stack frame
栈帧 stack frame
每一次函数调用都会维护一个栈帧(stack frame),栈帧主要用于传递参数、保存返回地址、保存局部变量等。先直接上一个《深入理解计算机系统》上的原图。
其中,%rsp 指向栈顶位置,%rbp 指向栈底位置。并且栈是由高地址向地址方向增长。
局部变量的布局是由编译器决定的,可能是由个高地址到低地址,也可能由低地址到高地址。
被调函数的前6个参数将由寄存器传入,超过6个的部分将通过栈传入。这里需要注意的是,在被调函数中为了能够对入参进行取地址,被调函数将会将前6个参数压入被调函数的栈中。
函数调用过程:
- 参数入栈。将参数按照一定的顺序将超过6个后的参数入栈。
- 返回地址入栈。将当前代码的一条指令地址压入栈中,函数返回时继续执行。
- 跳入被调函数地址。
- EBP入栈,保存当前栈帧状态值。
- ESP值赋给EBP。
- 分配当前栈帧。
函数返回过程:
- 保存被调用函数的返回值到 EAX 寄存器中。
- 恢复 ESP。
- 将被调函数底部保存的调用函数栈帧EBP值弹入EBP寄存器,恢复调用函数栈帧。
- 弹出当前栈顶元素,从栈中取到返回地址。
下面以一个例子来验证下栈帧布局:
先进入 main 函数的 func 函数调用点:
%rbp 值为 0x7fffffffe110,%rsp 的值为 0x7fffffffe0f0。在根据反汇编可以得到下一条指令的地址为 0x4008f4。根据这些信息我们可以推出 main 函数和 func 函数的栈帧如下:
以上栈帧信息可以dgb调试时候打印验证:
参考:
- 深入理解计算机系统
栈帧 stack frame相关推荐
- 浅谈函数栈帧(Stack Frame)
- JVM -- 运行时栈帧结构简介
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法的局部变量表,操作 ...
- vs调用堆栈窗口怎么弄出来_从零开始(1)栈帧、调用约定
逆向学习从零开始(1)栈帧.调用约定明白函数和寄存器.栈的关系 PE程序拖入OD有四个基础窗口:代码执行窗口.寄存器窗口.数据窗口.栈窗口,帮助我们对程序进行逆向分析,运行程序,处理器执行的是汇编代码 ...
- JVM运行时栈帧结构
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_36367789/article/details/81711223 栈帧(Stack Frame ...
- JVM内存模型:运行时栈帧结构
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法的局部变量表,操作 ...
- 内存分区与栈帧使用分析
转载自:https://blog.csdn.net/zhongguoren666/article/details/7586074 函数调用是程序设计中的重要环节,也是程序员应聘时常被问及的,本文就函数 ...
- C++ 函数调用过程中栈区的变化——(栈帧、esp、ebp)
C++ 函数调用过程中栈区的变化 1.C++ 函数调用过程中栈区的变化 1.1.程序的内存分布 1.2.函数调用过程中栈的变化解析 参考 1.C++ 函数调用过程中栈区的变化 1.1.程序的内存分布 ...
- 运行时栈帧结构是怎样的?
写在前面 本文隶属于专栏<100个问题搞定Java虚拟机>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java ...
- C++ 反汇编/栈帧
文章目录 查看 C++ ASM 在线 C++ 反汇编 g++ -S VS 调试时断点查看反汇编信息 VS 在项目属性的文件输出源码+汇编 Debug 下的:[ProjectName].asm Rele ...
- Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)
Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...
最新文章
- 中山大学计算机学院运动会,中山大学2019年运动会.PDF
- Python解决NameError: name ‘reload‘ is not defined的问题
- linux 小白启航之路-搭建linuxDHCP中继服务器
- mac下在eclipse中怎样清除/切换svn
- hp380g5 安装linux7,hp 380G5 安装centos 7
- 印象笔记打开错误_只会用手机自带便签?这三款笔记软件分分钟秒杀
- 惠普ELITE X2 1012 G1平板拆机记录
- bu zhi dao yao zen me zuo
- [oracle]Oracle数据库安全管理
- jmeter性能测试各个方法介绍
- 我吐了72行金色爱心代码(༗清ཻ辞ཻ࿐入门原创)———永远清楚,不是只有你一个人在努力
- Drawio免费绘图工具
- 实时云渲染和本地渲染的区别
- Open3D 常见几何图形构建
- Median Pyramid Hard题解
- jsvascript === 和==的区别
- 人工智能行业调查研究报告(算法导论调查研究报告)
- 电信宽带免费提速到200M!不用安装小翼管家!
- MCU多功能遥测终端机RTU的特点和应用知多少?
- 论文写作公式使用 MacOS+Word+Mythtype 7