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,错误之处欢迎指正。