栈帧push的汇编解释

下面是常见的反汇编代码

push   %rbp
mov    %rsp,%rbp
push   %rbx
sub    $0x18,%rsppop    %rbx
pop    %rbp
retq

push %rbp是把%rbp寄存器的值保存到内存里面的数组模拟栈,结合下面的mov %rsp,%rbp可以知道,%rbp此刻push的就是上面一个栈帧的栈低位置,同时mov也将本初始化为0长度的栈帧低保存起来,因为此刻rsp是上一个栈帧的栈顶位置,刚好就是我的栈底位置。所以mov是把左边的操作数的值赋给右边。

下一步sub $0x18,%rsp表示将rsp减去24个字节,代表给传参留位置。这样rsp就开始移动。所以sub也是右边是结果,右边减去最左边。

push %rbx是因为是被调用者保护rbx

最后从栈弹出保存的rbx rbp到对应的寄存器,这样就相当于恢复的执行上下文。retq就返回到返回地址,一般是下一条指令地址。

栈帧push的汇编解释相关推荐

  1. 汇编-栈帧-寄存器esp, ebp

    转载 原文地址 栈帧%ebp,%esp详解 分类专栏: 汇编 首先应该明白,栈是从高地址向低地址延伸的.每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息.寄存器ebp指向 ...

  2. (动图详解)汇编视角观察函数栈帧的创建和销毁

    目录 ​1.阅读本文的价值 ​2.函数栈帧及栈的概念 ​3.部分寄存器及汇编指令 ​4.main函数的调用 5.main函数的栈帧创建 ​6.变量的栈帧创建 ​6.函数传参 ​7.函数内部运算及销毁 ...

  3. X86-64寄存器和栈帧--牛掰降解汇编函数寄存器相关操作

    X86-64寄存器和栈帧 概要 说到x86-64,总不免要说说AMD的牛逼,x86-64是x86系列中集大成者,继承了向后兼容的优良传统,最早由AMD公司提出,代号AMD64:正是由于能向后兼容,AM ...

  4. 过程(栈帧结构是干货)

    [0]写在前面 过程(栈帧结构是干货):本文总结于csapp, 加上自己的理解: [1]栈帧结构 每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息. 过程调用:函数调用另 ...

  5. 【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁

    上两篇文章我们初步接触了ABI-应用程序二进制接口的概念,点击链接查看上一篇文章:[软件开发底层知识修炼]二十二 ABI-应用程序二进制接口 二.了解了为什么会有ABI的存在.本篇文章继续学习ABI ...

  6. 内存分区与栈帧使用分析

    转载自:https://blog.csdn.net/zhongguoren666/article/details/7586074 函数调用是程序设计中的重要环节,也是程序员应聘时常被问及的,本文就函数 ...

  7. 帧栈使用的基本用法c语言,栈帧详解

    一. 理解栈帧 栈帧是什么,我们基本的理解是栈帧是栈帧也叫过程 活动记录,是 编译器用来实现过程/ 函数调用的一种数据结构.通俗来说栈帧就时C语言函数在调用的过程中的调用原理,就是当我们执行一个函数操 ...

  8. 栈操作与栈帧 (转)

    结构化程序的一个最基本的单元就是"函数"或者叫"过程".在汇编这一层自然也相应的有支持这些概念的指令操作,如栈操作和栈帧的概念. 首先这里要为"打开汇 ...

  9. 栈帧ebp,esp详解

    栈帧%ebp,%esp详解 分类专栏: 汇编 首先应该明白,栈是从高地址向低地址延伸的.每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息.寄存器ebp指向当前的栈帧的底部 ...

最新文章

  1. Mac 下 IDEA 启动慢的问题
  2. LinkedIn公司采用超大规模数据中心设计
  3. 使 IDEA 的 termina l可以使用 Linux 下的终端命令
  4. Android 原生通知Notification 写法
  5. C#中的cookie编程
  6. 生理周期,POJ(1006)
  7. java 读取 xmltype_java操作XMLType的几种方法
  8. 招聘 | 微生太高薪招聘多组学生信官(硕士及以上),月薪12k(北京为例),全国均可办公,推荐成功者奖励2000元...
  9. 7-8 字符串字母大小写转换 (15 分)
  10. android编译终止,android - Android NDK-没有此类文件或目录编译终止-头文件导出问题 - 堆栈内存溢出...
  11. runtime简单的使用解决实际问题(交换方法)
  12. vs2008+sp1
  13. Oracle数据库merge into的使用,存在则更新,不存在则插入
  14. PS2022丨Photoshop 2022软件下载+Ps安装教程
  15. Carson带你学Android:这是一份全面 详细的Android代码命名规范
  16. 计算机网络(4.1)——数据链路层的功能概述、封装成帧和透明传输
  17. C#正则判断手机号 邮箱 网址 日期 IP 身份证等
  18. lerna 生成自定义日志changelog
  19. c++ fgets() 用法
  20. DNS(域名系统)介绍,深入解析DNS解析失败发生的原因及解决方法

热门文章

  1. java 硬件中断_Java异步事件:轮询与中断
  2. python入门-if嵌套-火车站安检
  3. 网优5g前景_5G通信技术的优缺点及前景探讨
  4. zoj 3964 - Yet Another Game of Stones
  5. 手机端软件 小界面有“大江湖”
  6. 国内矿场面临全面关闭,为什么FIL却依旧那么淡定?
  7. 17.深入浅出:非正弦波发生电路——参考《模拟电子技术基础》清华大学华成英主讲
  8. 数组以及字符串的常用方法
  9. X86机器安装麒麟UOS双系统
  10. iOS 生成自定义位数随机数