局部变量与堆栈

 

 

我们知道函数中的局部变量存储在堆栈之中,如下图所示,当局部变量1、2、3存到堆栈中后,堆栈指针ESP并没有下移,依然指向原来的位置。出现这种情况的原因是:局部变量进入堆栈并不是使用push而是使用mov操作,所以ESP无变化。正是因为这样,如果函数把任何数据压入堆栈,那么局部变量将会被覆盖。

image

 

为了保护局部变量,解决方法是在函数代码的开始添加一行(针对汇编语言),通过从ESP寄存器减去一个值,为局部变量保留一定数量的堆栈空间。如下图所示:

image

现在,如果把任何数据压入堆栈,数据会被存放在局部变量下面,这就保护了局部变量。

posted @ 2014-08-13 19:40  ITtecman  阅读(1921)  评论(0编辑  收藏  举报