前言:本教程讲解的是32位汇编,使用到的工具是DTDEBUG。

1、什么是堆栈平衡

<1> 如果要返父程序,则当我们在堆栈中进行堆栈操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入堆栈中的地址。

也就是说我们的call指令调用函数之后,他的下一个地址会push到堆栈中,我们在函数中无论怎么操作堆栈,ret返回前堆栈必须指向的是call指令压入的地址。(这里我们假设函数参数不会操作堆栈,只是函数内容操作堆栈)

<2> 如果通过堆栈传递参数,那么函数执行完毕之后,要平衡参数导致的堆栈变化。

        假设我们调用两数之和的函数,函数如下:

调用,传参:(这里我们假设函数中不会操作堆栈,只是参数操作堆栈)

因此,为了保证上面的堆栈平衡,我们有两种解决方法:内平栈、外平栈

2、外平栈

先来讲外平栈,外平栈就是在函数外部平衡堆栈,以上面这张图为例,操作如下:

平衡操作如下:

执行前的堆栈:

执行后:

至此,外平栈完成。

3、内平栈

既然外屏栈是在函数外部实现平衡堆栈,那么内平栈就是在函数内部

函数如下:

平衡操作如下:

执行前:

执行后:

至此,内平栈结束。

总结:以上便是32位汇编中平衡栈堆栈的一些操作。

有错误的地方还望指出,大家一起进步。

【汇编】堆栈平衡、外平栈与内平栈相关推荐

  1. 汇编达人视频学习6(汇编眼中的函数、CALL指令执行函数、堆栈传参、堆栈平衡、外平栈、内平栈)

    title: 汇编达人视频学习6 date: 2021年8月4日 15点15分 tags: 汇编达人 categories: 汇编达人 21.汇编眼中的函数 1.什么是函数 函数就是一系列指令的集合, ...

  2. 从汇编角度理解 ebpesp 寄存器、函数调用过程、函数参数传递以及堆栈平衡

    关于函数参数的传递及堆栈指针的变化,一直缺乏系统的认识和了解,各种博客也只是片面的讲解某个局部知识点,并没有全局的把握和对栈的深刻理解.本文试图从汇编以及整体上,讲解函数调用时,堆栈的变化,以及到底是 ...

  3. 【手把手教程】keil5 c51使用汇编将数据从片外传输至片内RAM

    目录 Intro 快速上手 参考资料 Intro 本片文章将介绍如何使用汇编将片外数据传到片内,并使用debug展示数据在register中的流转.我们将以将片外2010H ~ 201FH单元的内容设 ...

  4. 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC

    本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...

  5. 51单片机中断的调用寄存器组(PSW)的作用,以及汇编堆栈的作用,堆栈指针的SP的使用方法,RAM的运行和ROM在单片机具体运行和C语言的优势和中断,定时器基础知识(上)

    一,堆栈在汇编的作用,以及PUSH ACC 和 PUSH PSW 通过最简单的8051单片机RAM的分配可知,单片机从烧程序到达到一定的工作过程.首先明白为什么要引如"烧"写的过程 ...

  6. 堆栈平衡:估计这是最详细的讲解堆栈平衡的了 vc++6.0

    转自:https://blog.csdn.net/lixiangminghate/article/details/43195717 #include <stdio.h> #include ...

  7. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

  8. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 .c代码文件 #include<stdio.h>short addend1 = 1;static int addend2 = 2;const stat ...

  9. java 堆 栈 ===_Java堆,栈,堆栈

    栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器 在java中,所有基本类型和引用类型都在栈中存储. ...

  10. GDB调试汇编堆栈过程的学习

    GDB调试汇编堆栈过程的学习 分析过程 这是我的C源文件: 1.安装32位兼容包 2.使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用 ...

最新文章

  1. asp.net文件上传下载的简单实现
  2. java 的继承_关于java中的继承
  3. python工程师待遇-Python工程师待遇如何 玩转Python看这里
  4. 在Excel中制作复合饼图
  5. 企业官网示例以及数据库表结构
  6. java string字符操作_Java对String类型字符串的各种操作姿势
  7. Unity Tiling和offset的使用
  8. 计算重叠最长子串问题
  9. Flink 1.10 SQL、HiveCatalog 与事件时间整合示例
  10. 牛客小白月赛4 J 强迫症 思维
  11. 微信订阅号利用订阅号助手发布信息
  12. 智能人物画像综合分析系统——Day8
  13. 嚣张!泡沫见到橡胶硫化消泡粉还不跪地求饶
  14. 单引号和0的ASCII码
  15. Dockerfile构建Springboot镜像
  16. 大数据的主要特征是什么?
  17. 1685_Excel的几种脚本处理方式
  18. 如何安装和设置Eufy Lumos Wi-Fi智能灯泡
  19. 笔记本计算机配置型号,笔记本怎么看配置,教您笔记本电脑配置怎么看
  20. Unity制作RPG游戏——战斗注视LockOn实现方法

热门文章

  1. 台式计算机调亮度,台式电脑显示器屏幕亮度怎么调节?
  2. java基础代码-实现键盘输入
  3. 十款最好用的远程桌面工具
  4. math.js api static function
  5. 解决magicdraw16.8无法在win8.1下破解使用
  6. 华硕Y450拆机清灰、拆下光驱助散热、卸载无用软件
  7. e470c拆机图解全拆 thinkpad_ThinkPad 拆机教程,更新特别部分,很特别哟!!!
  8. SPSS——总体均数的估计及假设检验(t 检验)
  9. 计算机网络-第一章测试题及答案
  10. C语言测量平差课程设计,测量平差课程设计-20210419024415.docx-原创力文档