天天看點

24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用

c.cpp

int g_x=3           

int fun_add(int p1,int p2){

    returnp1+p2;

}

int main(){

    intl_x=4;

    g_x= fun_add(l_x,2);

    return0:

}

編譯之後的彙編代碼如下

代碼段

int fun_add(int p1,int p2){

00411250 55                   push        ebp 

00411251 8B EC                mov         ebp,esp 

00411253 83 EC 40             sub         esp,40h 

00411256 53                   push        ebx 

00411257 56                   push        esi 

00411258 57                   push        edi 

    return p1+p2;

00411259 8B 45 08             mov         eax,dword ptr [p1] 

0041125C 03 45 0C             add        eax,dword ptr [p2] 

}

…………………………………..

int main(){

00411270 55                   push        ebp 

00411271 8B EC                mov         ebp,esp 

00411273 83 EC 44             sub         esp,44h 

00411276 53                   push        ebx 

00411277 56                   push        esi 

00411278 57                   push        edi 

    int l_x=4;

00411279 C7 45 FC 04 00 00 00 mov         dword ptr [l_x],4 

    g_x =fun_add(l_x,2);

00411280 6A 02                push        2 

00411282 8B 45 FC             mov         eax,dword ptr [l_x] 

00411285 50                   push        eax 

00411286 E8 93 FD FF FF       call        fun_add (41101Eh) 

0041128B 83 C4 08             add         esp,8 

0041128E A3 00 60 41 00       mov         dword ptr [g_x (416000h)],eax 

    return 0;

00411293 33 C0                xor         eax,eax 

}

00411295 5F                   pop         edi 

00411296 5E                   pop         esi 

00411297 5B                  pop         ebx 

00411298 8B E5                mov         esp,ebp 

0041129A 5D                   pop         ebp 

0041129B C3           

24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用
24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用

C語言函數調ESP EBP的含義

ESP是目前函數執行到了哪裡?

EBP儲存的是目前函數的棧底。

EBP指針的内容是 

父函數的棧底。

ESP如果要調用子函數,先要做好準備工作。

               儲存父函數狀态

               儲存調用函數 參數副本

               儲存退棧指令的位址(子函數執行完成後的下一條指令)

               儲存父函數棧底

24張圖詳解 寄存器 EBP ESP 在函數調用過程中的作用

繼續閱讀