当前位置:软件学习 > Word >>

rep+stos+dword+ptr+[edi]

 

00401028   push        edi                                                     

 

00401027   push        esi

 

00401026   push        ebx

 

00401029   lea         edi,[ebp-40h]              Edi Esp

 

00401023 sub esp,40h                                     40h的空间

 

0040102C   mov         ecx,10h

 

00401031   mov         eax,0CCCCCCCCh

 

00401036   rep stos    dword ptr [edi]

 

进入func后00401020 push ebp                     Esp Ebp

 

隐含把call的下一条指令入栈

 

0040107A   push        1

 

00401078   push        2                                                     

 

00401068   push   edi由于00401069 lea edi,[ebp-40h]看下面

 

00401067   push        esi

 

00401066   push        ebx                                                     

 

00401063   sub         esp,40h          (Edi)            Esp                                                   

 

00401063   sub         esp,40h            40h字节的数据空间                                                    

 

0040106C mov ecx,10h 00401071 mov eax,0CCCCCCCCh

 

00401076   rep stos    dword ptr [edi] ;

 

00401060 push ebp    00401061 mov ebp,esp                     Esp Ebp

 

 

 

 

 

转】C函数调用与堆栈

 

这几天突然很想弄明白c函数调用时栈的使用情况,上网查了一下资料,自已也研究了一下,这篇blog就把我的所得记录下来吧。

这篇blog试图讲明当一个c函数被调用时,一个栈帧(stack frame)是如何被建立,又如何被消除的。这些细节跟操作系统平台及编译器的实现有关,下面的描述是针对运行在Intel奔腾芯片上Linux的gcc编译器而言。c语言的标准并没有描述实现的方式,所以,不同的编译器,处理器,操作系统都可能有自己的建立栈帧的方式。

 

一个典型的栈帧

 

      ESP==>|           :             |

            |           .             |

            +-------------------------+

            | 被调用者保存的寄存器现场   |

            | EBX,ESI和EDI(根据需要)|

            +-------------------------+

            |  临时空间                |

            +-------------------------+

            |  局部变量#2              | [EBP - 8]

            +-------------------------+

            |  局部变量#1              | [EBP - 4]

            +-------------------------+

      EBP==>|  调用者的EBP             |

            +-------------------------+

            |  返回地址                |

            +-------------------------+

            |  实际参数#1              | [EBP + 8]

            +-------------------------+

            |  实际参数#2              | [EBP + 12]

            +-------------------------+

            |  实际参数#3              | [EBP + 16]

            +-------------------------+

            |  调用者保存的寄存器现场    |

&nb

补充:软件开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,