EBP指向的是当前的“栈帧底部”而非系统栈的“栈底”
“对应上面的描述,ESP指的是TOP,也就是栈顶;而EBP指向BASE,也就是栈底。”
我对这句话觉得不对,EBP应该指的是当前栈帧的底部,而不是整个栈的底部。
按照阳光的参考文献,我翻了一下《0day安全:软件漏洞分析技术》,发现“从计算机科学的角度看,栈是一种数据结构……”等内容直接来自该书第40页,但是在该页却没有看到“ESP指的是TOP,也就是栈顶;而EBP指向BASE,也就是栈底”的描述。
再翻到该书第44页,上面有关于这两个指针寄存器的更准确的说明:
+++++++++++++引文开始++++++++++++
“(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。
注意:EBP指向当前位于系统栈上最上边一个栈帧的底部,而不是系统栈的底部。严格说来,“栈帧底部”和“栈底”是不同的概念,本书在叙述中将坚持使用“栈帧底部”这一提法以示区别;ESP所指的栈帧顶部和系统栈的顶部是同一个位置,所以后面叙述中并不严格区分“栈帧顶部”和“栈顶”的概念。请您注意这里的差异,不要产生概念混淆。”
+++++++++++引文结束+++++++++++++
显然作者特别提醒读者,不要将“栈帧底部”和“栈底”的概念搞混。因此我认为阳光在这里有必要区别清楚,严格来说ebp中的指针指向的是“栈帧底部”而非系统栈的“栈底”。