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...