x86棧幀布局簡記

2021-05-23 12:02:16 字數 596 閱讀 7473

x86棧幀布局簡記

2008-01-24 01:27

雖然不用彙編做開發,但在c/c++中定位一些core問題時需要檢視堆疊結構,所以對堆疊布局要有乙個基本的了解,但長期不接觸就又忘了,因此在這裡做個簡記,以備用到的時候可以快速記起。

當函式p呼叫函式q時,q的引數是放在p的幀中的,且p中的下一條指令位址將被壓入棧中,形成p的棧幀的末尾。q的棧幀從儲存幀指標的位置開始,後面開始儲存其他暫存器的值。大多數資訊的訪問都是相對於幀指標(%ebp)的。如果函式要返回整數或指標的話,常用暫存器%eax來儲存返回值。

在x86平台下,根據慣例,暫存器%eax、%edx、%ecx被劃分為呼叫者儲存。當函式p(呼叫者)呼叫q(被呼叫者)時,q可以覆蓋這些暫存器的值,而不會破壞任何p所需要的資料。另外,%ebx、%esi、%edi、%ebp被劃分為被呼叫者儲存,這意味著q必須在覆蓋他們之前,將這些暫存器的值儲存到棧中,並在返回前恢復他們。

類別:預設分類 |

分享到i貼吧 | 瀏覽(

128) |

登入後,您就出現在這裡。

linux系統(X86)儲存記憶體布局

引數和環境區 程式執行的時候,命令列引數通過兩個入口引數傳遞給main 函式,第乙個引數 int argc表示 命令列引數的個數,第二個 char ar 是乙個指向命令列引數的指標陣列,每個命令列引數都是以 0 結尾 的字串。棧區 用來存放程式中的動態區域性變數 不包括static修飾的區域性變數,...

x86記憶體定址

最近又研究了一下記憶體定址,沒有乙份資料能講的透徹,不是不細緻,而是缺乏整體感,都不全面,讓人看完後沒有乙個整體模型,現就我關心的問題記錄如下,如果要很全面很細緻的記錄的話會花費我很多精力,所以只是記錄大概流程,以後再慢慢修正吧。所有貼圖皆來自網路 一 分段的由來 1.8086 分段的產生主要是因為...

170824 彙編 x86基礎

a.1625 5 王子昂 總結 2017年8月24日 連續第325天總結 b.逆向知識 資料移動分為5種方式 立即數到暫存器 立即數到記憶體 暫存器到暫存器 暫存器到記憶體或記憶體到暫存器 記憶體到記憶體 前4種是所有現代體系都支援的,第五種是x86獨有的,可以通過inc add來直接操作記憶體 另...