24张图详解 寄存器 EBP ESP 在函数调用过程中的作用

时间:2024-04-10 10:48:07


c.cpp

int g_x=3            /* 因为g_x是全局变量所以编译的时候,它已经被编译到了  数据段中  故:代码段没有它 */

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 在函数调用过程中的作用