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