当前位置: 代码迷 >> 汇编语言 >> 请大神详细解释下这11行汇编代码的意义
  详细解决方案

请大神详细解释下这11行汇编代码的意义

热度:148   发布时间:2016-05-02 04:35:19.0
请大神详细解释下这11行汇编代码的意思。
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,44h
00401016   push        ebx
00401017   push        esi
00401018   push        edi
00401019   lea         edi,[ebp-44h]
0040101C   mov         ecx,11h
00401021   mov         eax,0CCCCCCCCh
00401026   rep stos    dword ptr [edi]

00401028   mov         dword ptr [ebp-4],0FFFFFFFCh
------解决方案--------------------
00401010   push        ebp                                   ;
00401011   mov         ebp,esp                             ;栈框架,ms c/c++特点,后面使用ebp来寻址栈中内容,即局部变量
00401013   sub         esp,44h                             ;在栈中预留局部变量的存储空间,44h字节
00401016   push        ebx                                    ;
00401017   push        esi                                     ;
00401018   push        edi                                     ;保存ebx,esi,edi,没什么好说的
00401019   lea         edi,[ebp-44h]                     ;edi指向预留的局部变量空间的最低地址,并由此开始填充0cch,长度44h
0040101C   mov         ecx,11h                             ;rep stos的执行次数11h
00401021   mov         eax,0CCCCCCCCh       ;每次填充的内容,4个字节的0cch,可以看出:11h × 4 = 44h
00401026   rep stos    dword ptr [edi]               ;重复填充局部变量空间,注意填充的方向:从低地址向高地址

00401028   mov         dword ptr [ebp-4],0FFFFFFFCh         ;初始化变量 i = -4?

为啥要填充0cch而非其他值,比如0?
0cch对应为int3,断点中断指令,加入它我想是便于编译器检查程序是否未初始化就使用变量,或
误执行栈中的内容!

本人初学asm,错误之处欢迎指正。
  相关解决方案