首页
论坛
专栏
课程

[原创]浅析汇编之堆栈平衡

4天前 530

[原创]浅析汇编之堆栈平衡

4天前
530

为什么要使用堆栈

程序运行需要使用数据,那么数据存放在哪里呢,内存中.
首选存放位置是寄存器(运行速度快),但是由于可用的太少,所以就把数据存放在堆栈中.
但是要考虑存储位置的问题,要想精准的访问到存储的数据,就需要一个固定的内存地址(栈底)
数据从一个固定的位置开始,依次排列
函数内使用的局部变量都是临时存储的,如果每次调用都要往内存中存数据并且不去删除,就会造成很大的浪费
解决方法就是给他一块临时的空间,用完之后就覆盖掉,这就是开辟堆栈

具体代码示意图


具体堆栈示意图



为什么要保证堆栈平衡(保证数据环境)

程序在读写数据的时候是通过地址查找的,如果函数调用之前的堆栈与函数调用之后的堆栈不一致,就可能导致找不到数据或找到的数据错误,那么久有可能导致程序崩溃.

为什么要使用EBP寻址

EBP在程序的运行过程中有着特定的作用,保存数据的基址,根据这个特性,EBP一般不会被更改
但是在汇编中,函数需要用到的数据都会在运行前入栈,函数可以通过栈顶找到这些数据,所以在函数运行时,EBP就暂时失去了意义,所以我们就用它来临时保存开辟的栈底
也就是说,如果有一个数据(全局变量等)能够存储要索引的位置并且在函数运行时不会被改变,那么在函数运行时就可以用它来替代ESP去索引

如有错误请指正



[推荐]看雪企服平台,提供安全分析、定制项目开发、APP等级保护、渗透测试等安全服务!

最后于 3天前 被mb_dgsueauw编辑 ,原因:
上一主题 下一主题
最新回复 (0)
游客
登录 | 注册 方可回帖
返回