呼叫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...