棧幀,又稱過程活動記錄,是編譯器為實現函數/過程調用而在用戶棧(或內核棧)上分配的數據結構。每一次函數調用都會創建一個棧幀,函數返回時銷毀。它記錄了函數執行所需的所有上下文信息。
一個典型的棧幀包含以下關鍵字段(由高地址向低地址增長):
CALL 指令自動壓入)。PUSH EBP; MOV EBP, ESP 建立)。; 函數序言 push ebp ; 保存調用者 EBP mov ebp, esp ; 建立新幀基址 sub esp, N ; 分配局部變量空間 (N 字節) ; 函數體 ... 通過 [ebp+offset] 訪問參數,[ebp-offset] 訪問局部變量 ; 函數尾聲 mov esp, ebp ; 釋放局部變量空間 pop ebp ; 恢復調用者 EBP ret ; 彈出返回地址跳轉
setjmp/longjmp、C++ 異常展開依賴棧幀鏈。bt、info frame、disassemble 觀察棧幀佈局理解棧幀是掌握「函數調用本質」、調試崩潰現場、編寫高性能/安全代碼的基石。