返回值为对象的函数识别

来源:互联网 发布:mac怎么把图标放桌面 编辑:程序博客网 时间:2024/05/21 10:28

调用部分:

    CReturn Return;    Return = GetCReturn();004077A7 8D 85 70 FF FF FF    lea         eax,[ebp-90h]          ;返回的对象的栈空间首地址004077AD 50                   push        eax  004077AE E8 68 A5 FF FF       call        GetCReturn (0401D1Bh)  ;调用函数 先到跳转表 再跳过去004077B3 83 C4 04             add         esp,4  ;先把返回的对象放到临时空间中004077B6 B9 0B 00 00 00       mov         ecx,0Bh  004077BB 8B F0                mov         esi,eax  004077BD 8D 7D 9C             lea         edi,[ebp-64h]  004077C0 F3 A5                rep movs    dword ptr es:[edi],dword ptr [esi]  ;再把临时空间中的数据传给结果 为什么要多此一举呢 可能是因为没有开优化吧 004077C2 B9 0B 00 00 00       mov         ecx,0Bh  004077C7 8D 75 9C             lea         esi,[ebp-64h]  004077CA 8D 7D CC             lea         edi,[Return]  004077CD F3 A5                rep movs    dword ptr es:[edi],dword ptr [esi]  

函数主体:

CReturn GetCReturn(){004076B0 55                   push        ebp  004076B1 8B EC                mov         ebp,esp  004076B3 83 EC 3C             sub         esp,3Ch  004076B6 56                   push        esi  004076B7 57                   push        edi  004076B8 8D 7D C4             lea         edi,[ebp-3Ch]  ;security_cookie机制004076BB B9 0F 00 00 00       mov         ecx,0Fh  004076C0 B8 CC CC CC CC       mov         eax,0CCCCCCCCh  004076C5 F3 AB                rep stos    dword ptr es:[edi]  004076C7 A1 08 C0 4B 00       mov         eax,dword ptr [__security_cookie (04BC008h)]  004076CC 33 C5                xor         eax,ebp  004076CE 89 45 FC             mov         dword ptr [ebp-4],eax      CReturn Return ;    Return.m_nNumber = 0;004076D1 C7 45 CC 00 00 00 00 mov         dword ptr [Return],0      for (int i = 0; i < 10; i++)004076D8 C7 45 C4 00 00 00 00 mov         dword ptr [ebp-3Ch],0  004076DF EB 09                jmp         GetCReturn+3Ah (04076EAh)  004076E1 8B 45 C4             mov         eax,dword ptr [ebp-3Ch]      for (int i = 0; i < 10; i++)004076E4 83 C0 01             add         eax,1  004076E7 89 45 C4             mov         dword ptr [ebp-3Ch],eax  004076EA 83 7D C4 0A          cmp         dword ptr [ebp-3Ch],0Ah  004076EE 7D 0F                jge         GetCReturn+4Fh (04076FFh)      {        Return.m_nArry[i] = i+1;004076F0 8B 4D C4             mov         ecx,dword ptr [ebp-3Ch]  004076F3 83 C1 01             add         ecx,1  004076F6 8B 55 C4             mov         edx,dword ptr [ebp-3Ch]  004076F9 89 4C 95 D0          mov         dword ptr [ebp+edx*4-30h],ecx      }004076FD EB E2                jmp         GetCReturn+31h (04076E1h)      return Return;004076FF B9 0B 00 00 00       mov         ecx,0Bh  00407704 8D 75 CC             lea         esi,[Return]  ;局部对象首地址00407707 8B 7D 08             mov         edi,dword ptr [ebp+8]  ;返回对象首地址;把局部对象赋给返回对象中0040770A F3 A5                rep movs    dword ptr es:[edi],dword ptr [esi]  0040770C 8B 45 08             mov         eax,dword ptr [ebp+8]  }
0 0
原创粉丝点击