幀指標和棧指標

2021-08-28 20:44:15 字數 818 閱讀 1373

2023年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種,堆,棧,靜態,常量,**

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

常量字串都在常量區里。

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

Objective C指標 棧幀 棧

1 objective c的指標是用來只是物件的,例如 nsstring somestring the string 這種語法基本上是照搬c語言的,宣告了乙個名為somestring的變數,其型別為nsstring 也就是說此變數為指向nsstring的指標。所有objective c的物件都必須這...

ESP(棧頂指標)EBP(棧底指標)

1 esp 棧指標暫存器 extended stack pointer 其內存放著乙個指標,該指標永遠指向系統棧最上面乙個棧幀的棧頂。由於棧的位址大小是從上到下從大到小,所以esp指在棧的最底端。2 ebp 基址指標暫存器 extended base pointer 其內存放著乙個指標,該指標永遠指...

指標和指標的指標

int main void 首先在vc6.0裡面新建乙個c 控制台工程,然後鍵入以上 最後按f10進行除錯。在watch視窗中鍵入如上圖所示變數資訊,首先,對於第一行data 5沒問題 然後對data變數採用取位址符 倒數第三行 data 0x0012ff7c,也即data存放的記憶體位址為0x00...