1. 程式人生 > >幀指標和棧指標

幀指標和棧指標

幀指標和棧指標

2013年11月29日 14:24:41 HuntingGo 閱讀數:2743 標籤: linux作業系統 更多

個人分類: linux

原來幀指標指向的也是棧,不過是一個故事的開始。

而棧指標是一個故事的當下。

那幀指標為啥叫ebp,難道b==base。因為幀指標也叫基址指標。

幀指標使得訪問函式的引數很容易。

所以任何函式呼叫進來的第一件事都是保護呼叫者的幀指標,以使得返回時可以恢復呼叫者的幀指標。

------------------------------

函式呼叫的故事

1.各種引數入棧

2.返回地址入棧,這個是用當前指令地址++當作返回地址的

3.呼叫者的幀指標入棧保護(本次呼叫的基址指標就指向這裡)

4.呼叫者的暫存器入棧保護

5.被呼叫的函式的區域性變數的分配

依cpu不同會有細小的差別

 

函式呼叫時的記憶體佈局:

|-----引數----------|

|---返回地址--------|

|----舊的ebp--------| 新的ebp就會指向這裡

|---儲存的暫存器狀態|

|--本地變數---------|

所以當前ebp-4就是返回地址,當前ebp-8就是呼叫傳來的引數。

 ----------------------------

堆是可以建立很多個的,但是每個堆是有最大尺寸限制的。

記憶體有5種,堆,棧,靜態,常量,程式碼

全域性變數和靜態變數都在靜態記憶體裡。

常量字串都在常量區裡。

--------------------------------

緩衝區溢位對棧的破壞是顯而易見的,棧上的緩衝區溢位可以覆蓋返回地址,被惡意程式碼攻擊,也就誰說棧的緩衝區溢位很容易被利用,那麼堆上的緩衝區溢位危險不危險?