- UID
 - 2198
 
 注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主 
    
 
 
 
该用户从未签到  
 | 
 
 
 楼主 |
发表于 2010-2-2 13:08:08
|
显示全部楼层
 
 
 
38:       tt = GetData(30); 
0040E9E8   push        1Eh 
0040E9EA   lea         eax,[ebp-20h]                          // 把返回对象的地址压入堆栈 
0040E9ED   push        eax 
0040E9EE   call        @ILT+30(GetData) (00401023)   //  
0040E9F3   add         esp,8 
0040E9F6   mov         dword ptr [ebp-2Ch],eax          // 返回的临时对象 
0040E9F9   mov         ecx,dword ptr [ebp-2Ch]                // 开始按位COPY 
0040E9FC   mov         edx,dword ptr [ecx] 
0040E9FE   mov         eax,dword ptr [ecx+4]           
0040EA01   mov         dword ptr [ebp-14h],edx 
0040EA04   mov         dword ptr [ebp-10h],eax                // Copy 函数结束 
0040EA07   lea         ecx,[ebp-20h] 
0040EA0A   call        @ILT+10(Test::~Test) (0040100f) 
 
// 编译器的编译原则(申请空间) 
// 把函数当返回值来看待 以决定该变量所需要的空间 
// 若返回值为对象 则压入的参数个数 + 1 
 
 
call        @ILT+30(GetData) (00401023) 
{ 
29:       Test temp(nData); 
004010E4   mov         eax,dword ptr [ebp+0Ch] 
004010E7   push        eax 
004010E8   lea         ecx,[ebp-14h]                        // 局部变量的空间 
004010EB   call        @ILT+0(Test::Test) (00401005)   
30:       return temp; 
004010F0   mov         ecx,dword ptr [ebp+8]                  // 参数 
004010F3   mov         edx,dword ptr [ebp-14h]                // 赋值(续表) 
004010F6   mov         dword ptr [ecx],edx                // 赋值(m_nData) 
004010F8   mov         eax,dword ptr [ebp-10h] 
004010FB   mov         dword ptr [ecx+4],eax 
004010FE   mov         ecx,dword ptr [ebp-18h] 
00401101   or          ecx,1 
00401104   mov         dword ptr [ebp-18h],ecx 
00401107   lea         ecx,[ebp-14h] 
0040110A   call        @ILT+10(Test::~Test) (0040100f) // 赋值OVER后 析构掉函数内部的局部对象) 
0040110F   mov         eax,dword ptr [ebp+8] 
31:   } |   
 
 
 
 |