调用部分:
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]
}