esp和ebp指針


gdb調試的時候會出現esp和ebp這兩個指針,而這兩個指針為我們查看棧的情況提供了方便。

簡單點說,esp指向棧頂,而ebp指向棧底。例如一段程序:

 1 #include <stdio.h>
 2 
 3 int layout(int a){
 4     int b = a + 5;
 5     return b;    
 6 }
 7 
 8 int main(void){
 9     int a = 5;
10     layout(5);
11 
12     return 0;      
13 }
View Code

執行過程中esp和ebp的狀態如下:

 

這時執行main函數中調用layout之前的棧的狀態。調用layout時棧的狀態如下:

所以,esp和ebp指向當前執行函數的棧頂和棧底,這也是每次調用函數時我們需要保存ebp的原因。esp不用保存,A調用B時,A的棧頂就是B的棧底。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM