1. 程式人生 > >2018/11/03-棧、x86架構和暫存器-《惡意程式碼分析實戰》

2018/11/03-棧、x86架構和暫存器-《惡意程式碼分析實戰》

  棧用於函式的記憶體、區域性變數、流控制結構等被儲存在棧中。棧是一種用壓和彈操作來刻畫的資料結構,向棧中壓入一些東西,然後再把他們彈出來。它是一種先入後出(LIFO)的結構。

  x86架構有對棧的內建支援。用於這種支援的暫存器包括ESP和EBP。其中,ESP是棧指標,包含了指向棧頂的記憶體地址。一些東西被壓入或彈出棧時,這個暫存器的值相應改變。EBP是棧基址暫存器,在一個函式中會保持不變,因此程式把它當成定位器,用來確定區域性變數和引數的位置。

  與棧有關的指令包括push、pop、call、leave、enter和ret。在記憶體中,棧分配成自頂向下的,最高的地址最先被使用。當一個值被壓入棧時,使用低一點的地址。

  棧只能用於短期儲存。它經常用於儲存區域性變數、引數和返回地址。其主要用途是管理函式呼叫之間的資料交換。而不同的編譯器對這種管理方法的具體實現有所不同,但大部分常見約定都使用EBP的地址來引用區域性變數與引數。