【汇编】堆栈平衡、外平栈与内平栈
前言:本教程讲解的是32位汇编,使用到的工具是DTDEBUG。
1、什么是堆栈平衡
<1> 如果要返父程序,则当我们在堆栈中进行堆栈操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入堆栈中的地址。
也就是说我们的call指令调用函数之后,他的下一个地址会push到堆栈中,我们在函数中无论怎么操作堆栈,ret返回前堆栈必须指向的是call指令压入的地址。(这里我们假设函数参数不会操作堆栈,只是函数内容操作堆栈)
<2> 如果通过堆栈传递参数,那么函数执行完毕之后,要平衡参数导致的堆栈变化。
假设我们调用两数之和的函数,函数如下:
调用,传参:(这里我们假设函数中不会操作堆栈,只是参数操作堆栈)
因此,为了保证上面的堆栈平衡,我们有两种解决方法:内平栈、外平栈
2、外平栈
先来讲外平栈,外平栈就是在函数外部平衡堆栈,以上面这张图为例,操作如下:
平衡操作如下:
执行前的堆栈:
执行后:
至此,外平栈完成。
3、内平栈
既然外屏栈是在函数外部实现平衡堆栈,那么内平栈就是在函数内部
函数如下:
平衡操作如下:
执行前:
执行后:
至此,内平栈结束。
总结:以上便是32位汇编中平衡栈堆栈的一些操作。
有错误的地方还望指出,大家一起进步。
【汇编】堆栈平衡、外平栈与内平栈相关推荐
- 汇编达人视频学习6(汇编眼中的函数、CALL指令执行函数、堆栈传参、堆栈平衡、外平栈、内平栈)
title: 汇编达人视频学习6 date: 2021年8月4日 15点15分 tags: 汇编达人 categories: 汇编达人 21.汇编眼中的函数 1.什么是函数 函数就是一系列指令的集合, ...
- 从汇编角度理解 ebpesp 寄存器、函数调用过程、函数参数传递以及堆栈平衡
关于函数参数的传递及堆栈指针的变化,一直缺乏系统的认识和了解,各种博客也只是片面的讲解某个局部知识点,并没有全局的把握和对栈的深刻理解.本文试图从汇编以及整体上,讲解函数调用时,堆栈的变化,以及到底是 ...
- 【手把手教程】keil5 c51使用汇编将数据从片外传输至片内RAM
目录 Intro 快速上手 参考资料 Intro 本片文章将介绍如何使用汇编将片外数据传到片内,并使用debug展示数据在register中的流转.我们将以将片外2010H ~ 201FH单元的内容设 ...
- 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC
本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...
- 51单片机中断的调用寄存器组(PSW)的作用,以及汇编堆栈的作用,堆栈指针的SP的使用方法,RAM的运行和ROM在单片机具体运行和C语言的优势和中断,定时器基础知识(上)
一,堆栈在汇编的作用,以及PUSH ACC 和 PUSH PSW 通过最简单的8051单片机RAM的分配可知,单片机从烧程序到达到一定的工作过程.首先明白为什么要引如"烧"写的过程 ...
- 堆栈平衡:估计这是最详细的讲解堆栈平衡的了 vc++6.0
转自:https://blog.csdn.net/lixiangminghate/article/details/43195717 #include <stdio.h> #include ...
- 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析
20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...
- GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 分析过程 .c代码文件 #include<stdio.h>short addend1 = 1;static int addend2 = 2;const stat ...
- java 堆 栈 ===_Java堆,栈,堆栈
栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器 在java中,所有基本类型和引用类型都在栈中存储. ...
- GDB调试汇编堆栈过程的学习
GDB调试汇编堆栈过程的学习 分析过程 这是我的C源文件: 1.安装32位兼容包 2.使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用 ...
最新文章
- asp.net文件上传下载的简单实现
- java 的继承_关于java中的继承
- python工程师待遇-Python工程师待遇如何 玩转Python看这里
- 在Excel中制作复合饼图
- 企业官网示例以及数据库表结构
- java string字符操作_Java对String类型字符串的各种操作姿势
- Unity Tiling和offset的使用
- 计算重叠最长子串问题
- Flink 1.10 SQL、HiveCatalog 与事件时间整合示例
- 牛客小白月赛4 J 强迫症 思维
- 微信订阅号利用订阅号助手发布信息
- 智能人物画像综合分析系统——Day8
- 嚣张!泡沫见到橡胶硫化消泡粉还不跪地求饶
- 单引号和0的ASCII码
- Dockerfile构建Springboot镜像
- 大数据的主要特征是什么?
- 1685_Excel的几种脚本处理方式
- 如何安装和设置Eufy Lumos Wi-Fi智能灯泡
- 笔记本计算机配置型号,笔记本怎么看配置,教您笔记本电脑配置怎么看
- Unity制作RPG游戏——战斗注视LockOn实现方法
热门文章
- 台式计算机调亮度,台式电脑显示器屏幕亮度怎么调节?
- java基础代码-实现键盘输入
- 十款最好用的远程桌面工具
- math.js api static function
- 解决magicdraw16.8无法在win8.1下破解使用
- 华硕Y450拆机清灰、拆下光驱助散热、卸载无用软件
- e470c拆机图解全拆 thinkpad_ThinkPad 拆机教程,更新特别部分,很特别哟!!!
- SPSS——总体均数的估计及假设检验(t 检验)
- 计算机网络-第一章测试题及答案
- C语言测量平差课程设计,测量平差课程设计-20210419024415.docx-原创力文档