+ -
当前位置:首页 → 问答吧 → ebp可访问整个堆栈esp只能访问栈顶这两句话该如何去理解/

ebp可访问整个堆栈esp只能访问栈顶这两句话该如何去理解/

时间:2011-01-22

来源:互联网

ebp可访问整个堆栈esp只能访问栈顶这两句话该如何去理解/
谢谢给个通俗点儿的解释,.,..

作者: lloveyou520   发布时间: 2011-01-22

这句话本来就不对,ebp和esp的主要区别在于:一个函数内部ebp指向的是函数入口处栈指针,而esp是当前指令的栈指针,所以一般来说,esp是变化的,他随着push,pop,add esp,0xXX,sub esp,0xXX等的指令的变化而变化,但在一个函数内部ebp通常是不变的(除非人为的用汇编指令对ebp操作),所以通常用ebp来保存函数内部的参数,局部变量等重要的内容(由于esp可变,不能用esp访问),并且在函数结束的时候将ebp的值赋值给esp来维持栈的平衡。
实际上ebp和esp都能访问到整个栈的内容,但是由于esp的可变性,通常并不用esp来访问,而用ebp访问。

作者: chzhn   发布时间: 2011-01-22

楼上正解

作者: masmaster   发布时间: 2011-01-22

很通俗的说就是,任何可以自由访问内存的寄存器都可访问整个堆栈,只不过ebp不需要段前缀了,所以都用ebp访问堆栈内的数据。至于esp,esp要指向栈顶,也就是说,esp的活动受出入栈指令的影响,用起来肯定不方便,其实esp也可以访问整个堆栈的,只不过这样弄就是自己找别扭了

作者: Simbon   发布时间: 2011-01-23