反彙編 函式的呼叫和實現 筆記

2021-06-07 05:05:57 字數 599 閱讀 4751

呼叫call時 會讓棧push 返回位址 相對就的 esp +4

進入call 後 先儲存 ebp

然後 把esp 給了ebp 當前函式堆疊從此開始

接下來 就是esp 減多少了. esp減多少就是這個函式的棧多大 從epb 開始加上這個值就是這個函式所用棧的範圍.如果沒變數 esp 不減, 如果有1個int esp-8 , 有2個int esp -c.

再下來就是儲存環境了.

push ...

相對應函式結尾

pop ...

函式結尾時的ret  這個指令會讓 esp +4. 如果有這樣的表示式 ret 4 執行這個指令會讓esp+4+後面的這個數. 

斷在函式入口時看棧:

1 返回位址

2 第乙個引數

3 第二個引數

4 .....

ebp 記錄了函式進來時 esp 的值

ebp+4 記錄了棧返回的位址.

epb+8 第乙個引數

epb+12 第乙個引數

epb+c 第三個引數

epb-8 epb-c epb-14   //這類的東西就是它的區域性變數

esp 上面的上變數, 下面的是引數

反彙編 函式巢狀呼叫

實現的功能 兩層函式呼叫,外層函式的傳入的兩個引數再傳到子函式中相加,實現四個數相加返回 004010e8 6a 03 push 3 壓入3 004010ea 6a 02 push 2 壓入2 004010ec 6a 01 push 1 壓入1 004010ee e8 12ffffff call s...

函式指標呼叫和直接函式呼叫的反彙編對比

本文主要從x86彙編一級來檢視函式呼叫和函式指標呼叫函式的差別。具體看如下的兩個函式 void show void showdata int a 下面是兩者彙編 對比 18 show 00411aae e8 3d f6 ff ff call show 4110f0h 19 20 void ptrsh...

反彙編之簡單函式呼叫

簡單的函式呼叫,通過反彙編可以清楚了解 舉例 include int add int a,int b int main void 這是乙個簡單的通過呼叫函式計算兩數之和的程式 vc6.0生成的彙編 如下 ebp 棧低 高位址 esp 棧頂 低位址 add函式 push ebp ebp 1000 es...