[原创]浅析汇编之堆栈平衡
为什么要使用堆栈
程序运行需要使用数据,那么数据存放在哪里呢,内存中.
首选存放位置是寄存器(运行速度快),但是由于可用的太少,所以就把数据存放在堆栈中.
但是要考虑存储位置的问题,要想精准的访问到存储的数据,就需要一个固定的内存地址(栈底)
数据从一个固定的位置开始,依次排列
函数内使用的局部变量都是临时存储的,如果每次调用都要往内存中存数据并且不去删除,就会造成很大的浪费
解决方法就是给他一块临时的空间,用完之后就覆盖掉,这就是开辟堆栈
具体代码示意图
具体堆栈示意图
为什么要保证堆栈平衡(保证数据环境)
程序在读写数据的时候是通过地址查找的,如果函数调用之前的堆栈与函数调用之后的堆栈不一致,就可能导致找不到数据或找到的数据错误,那么久有可能导致程序崩溃.
为什么要使用EBP寻址
EBP在程序的运行过程中有着特定的作用,保存数据的基址,根据这个特性,EBP一般不会被更改
但是在汇编中,函数需要用到的数据都会在运行前入栈,函数可以通过栈顶找到这些数据,所以在函数运行时,EBP就暂时失去了意义,所以我们就用它来临时保存开辟的栈底
也就是说,如果有一个数据(全局变量等)能够存储要索引的位置并且在函数运行时不会被改变,那么在函数运行时就可以用它来替代ESP去索引
如有错误请指正
[原创]浅析汇编之堆栈平衡相关推荐
- 汇编达人视频学习6(汇编眼中的函数、CALL指令执行函数、堆栈传参、堆栈平衡、外平栈、内平栈)
title: 汇编达人视频学习6 date: 2021年8月4日 15点15分 tags: 汇编达人 categories: 汇编达人 21.汇编眼中的函数 1.什么是函数 函数就是一系列指令的集合, ...
- 从汇编角度理解 ebpesp 寄存器、函数调用过程、函数参数传递以及堆栈平衡
关于函数参数的传递及堆栈指针的变化,一直缺乏系统的认识和了解,各种博客也只是片面的讲解某个局部知识点,并没有全局的把握和对栈的深刻理解.本文试图从汇编以及整体上,讲解函数调用时,堆栈的变化,以及到底是 ...
- 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC
本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...
- 堆栈平衡:估计这是最详细的讲解堆栈平衡的了 vc++6.0
转自:https://blog.csdn.net/lixiangminghate/article/details/43195717 #include <stdio.h> #include ...
- 在地址随机化的操作系统环境下的堆栈平衡
最近学习汇编以及各种和汇编有关系的课,在看汇编代码的时候发现各种对esp啊ebp的操作,最后的目的很多是为了堆栈平衡,因为如果函数调用之前和之后的堆栈不一致,就可能导致找不到数据或者找错数据.然后就想 ...
- 【ARM汇编的堆栈问题】压栈运用|堆栈类型测试
[ARM汇编的堆栈问题] ☀️作者简介:大家好我是IM汤姆凯特,大家可以叫我汤姆
- ESP定律和堆栈平衡
一.什么是ESP 二. 例说ESP与OD的对比 三. 正式开讲ESP定律 四. ESP定律的运行栗子 五. 堆栈平衡讲解 六.ESP定律的变形用法
- 了解MSIL汇编和IL汇编评估堆栈
.assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() c ...
- 【原创】VB利用堆栈实现算术表达式计算
这个抽象算法早已为人所知,只不过在VB的公开文档中鲜见示例代码.于是,为了提高自己的程序设计水平,锻炼自己的能力,我写了如下代码. [VB代码版权所有,允许转载修改用作学习目的,转载必须注明来源] [ ...
- [原创] PowerPC 汇编入门与优化
PowerPC Figure – PPC入门与优化 By Skywind(2007) http://www.joynb.net/blog/ 背景介绍 PowerPC于1991年IBM/MOTO/APP ...
最新文章
- android ajax 跨域更新本地html,本地webapp是怎么解决跨域问题的?
- Beanstalkd使用
- db服务器作用,数据库服务器
- 阿里 BladeDISC 深度学习编译器正式开源
- 2020年上半年小程序互联网发展报告
- ZooKeeper 概念讲的好
- 378.有序矩阵中第K小的元素
- todo Java 并发编程
- 开源库TinyXML2简介及使用
- 富士施乐打印机DP P355d设置说明
- 客户关系管理系统(CRM)的开发过程中使用到的开发工具总结
- 2020 年最具潜力 44 个顶级开源项目,涵盖 11 类 AI 学习框架、平台(值得收藏)...
- []*T *[]T *[]*T 傻傻分不清楚
- 联想IdeaPad Z460在Win10环境下BIOS刷白名单
- 建木(Jianmu)----迈出建木第一步创建项目分组
- Portainer -- Docker可视化管理工具的安装配置及使用
- JUC笔记(三)多线程的核心
- pyspark ValueError: Some of types cannot be determined after inferring
- OPPO 2020届全球校园招聘启动
- Manifest merger failed问题:tools:replace=android:theme和tools:replace=android:icon
热门文章
- 明华澳汉 sle_4442 卡 读写
- java 输入人名输出_Java 输入汉字姓名 输出 姓名拼音 首字母缩写组合
- cmd复制文件到其他目录
- band math函数_Envi中波段运算(bandmath)常用的函数
- c语言课程设计,学生信息管理系统
- 双管道(CreatePipe)与cmd.exe进程间通信的有关问题 完美解决
- 计算机sense服务无法启动,workstation服务无法启动解决办法
- 六自由度机器人设计过程-范例
- C语言测量平差课程设计,测量平差课程设计-20210419024415.docx-原创力文档
- android 放大镜功能,Android 做一个放大镜的效果(转)