首页
论坛
专栏
课程

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

2019-4-14 19:40 1552

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

2019-4-14 19:40
1552

为什么要使用堆栈

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

具体代码示意图


具体堆栈示意图



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

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

为什么要使用EBP寻址

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

如有错误请指正



[公告]LV6级以上的看雪会员可以免费获得《2019安全开发者峰会》门票一张!!

最后于 2019-4-15 09:50 被mb_dgsueauw编辑 ,原因:
最新回复 (0)
游客
登录 | 注册 方可回帖
返回