C++反汇编十(数组)

来源:互联网 发布:cdma lte是什么网络 编辑:程序博客网 时间:2024/06/06 10:00
15:   void ArrayTest()16:   {004010D0   push        ebp004010D1   mov         ebp,esp004010D3   sub         esp,5Ch004010D6   push        ebx004010D7   push        esi004010D8   push        edi004010D9   lea         edi,[ebp-5Ch]004010DC   mov         ecx,17h004010E1   mov         eax,0CCCCCCCCh004010E6   rep stos    dword ptr [edi]// 初始化17:       const int ArrSize=5;004010E8   mov         dword ptr [ebp-4],5// 局部变量ebp-4即数组长度赋值为518:       int Arr[ArrSize]={0};004010EF   mov         dword ptr [ebp-18h],0// ebp-18为数组首地址,此句=Arr[0]=0;004010F6   xor         eax,eax004010F8   mov         dword ptr [ebp-14h],eax// Arr[1]=0004010FB   mov         dword ptr [ebp-10h],eax// Arr[2]=0004010FE   mov         dword ptr [ebp-0Ch],eax// Arr[3]=000401101   mov         dword ptr [ebp-8],eax// Arr[4]=019:       for (int i=0;i<ArrSize;i++)00401104   mov         dword ptr [ebp-1Ch],0// 循环变量赋初值00040110B   jmp         ArrayTest+46h (00401116)// 跳向比较处,判断循环条件是否满足0040110D   mov         ecx,dword ptr [ebp-1Ch]// 循环变量放ecx00401110   add         ecx,1// ecx++00401113   mov         dword ptr [ebp-1Ch],ecx// ecx放入循环变量,即循环变量++00401116   cmp         dword ptr [ebp-1Ch],5// 循环变量和5比较0040111A   jge         ArrayTest+58h (00401128)// 循环变量大于等于5,则循环完毕,跳出循环20:       {21:           Arr[i]=i;0040111C   mov         edx,dword ptr [ebp-1Ch]// 循环没有结束,将循环变量值放入edx,用来寻址数组0040111F   mov         eax,dword ptr [ebp-1Ch]// 将循环变量放入eax00401122   mov         dword ptr [ebp+edx*4-18h],eax// ebp-18处为数组首地址,该地址每次+sizeof(数组类型),便是下一个数组元素的内存地址,此处sizeof(int)=4;22:       }00401126   jmp         ArrayTest+3Dh (0040110d)// 继续循环23:   }00401128   pop         edi00401129   pop         esi0040112A   pop         ebx0040112B   mov         esp,ebp0040112D   pop         ebp0040112E   ret

原创粉丝点击