逆向之函數棧幀結構分析

逆向之函數棧幀結構分析

函數的簡介

  • 函數的定義

  計算機的函數,是一個固定的一個程序段,或稱其爲一個子程序,它在可以實現固定運算功能的同時,還帶有一個入口和一個出口。

  • 函數的入口:

  函數的入口,就是函數所帶的各個參數,我們可以通過這個入口,把函數的參數值代入子程序供計算機處理。

  • 函數的出口:

  函數的出口,就是指函數的函數值,在計算機求得之後,由此口帶回給調用它的程序

  • 函數調用過程中的重要寄存器:

  (1)EIP-程序計數器/pc指針,存儲的永遠是當前cpu正在執行指令的下一條指令

  (2)EBP-幀指針,在函數的調用過程中存放了維護這個棧的棧底指針

  (3)ESP-棧指針,在函數的調用過程中存放了維護這個棧的棧頂指針

函數棧幀

棧的生長:棧是由高地址向地地址的方向生長
棧的幀棧定義:棧有其棧頂和棧底,在x86系統的CPU中,寄存器ebp保存的是棧底地址稱爲幀指針,寄存器esp保存的是棧頂地址,稱爲棧指針
幀棧的變化: ebp一般由系統改變它的值,esp會隨着數據的入棧和出棧而移動,但esp始終指向棧頂

 

 棧幀變化實例

 

 棧幀變化過程

代碼

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章