码迷,mamicode.com
首页 > 其他好文 > 详细

006 this指针原理

时间:2019-10-03 12:57:28      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:argv   char   出栈   div   ptr   public   code   参数   int   

 

/*
目录:
   一 this指针原理
*/

 

一 this指针原理

class CTest
{
public:
    CTest(int nNum)
    {
        this->nNum = nNum;
    }
    ~CTest()
    {

    }
    void Print()
    {
        cout << nNum << endl;
    }
private:
    int nNum;
};


int main(int argc, char *argv[], char **envp)
{
    CTest c(0x11);
    c.Print();

    return 0;
}

// 反汇编
// 调用函数
int main(int argc, char *argv[], char **envp)
{
   136:     CTest c(0x11);
0041A8BD  push        11h  
0041A8BF  lea         ecx,[c]                      // 获取地址 : ecx  - 变量c地址
0041A8C2  call        CTest::CTest (0411983h)  
0041A8C7  mov         dword ptr [ebp-4],0  
    return 0;
}


// 别调函数
   114: class CTest
   115: {
   116: public:
   117:     CTest(int nNum)
004122F0  push        ebp  
004122F1  mov         ebp,esp  
004122F3  sub         esp,0CCh  
004122F9  push        ebx  
004122FA  push        esi  
004122FB  push        edi  
004122FC  push        ecx                      // 压栈参数 : ecx - 变量c地址
004122FD  lea         edi,[ebp-0CCh]  
00412303  mov         ecx,33h  
00412308  mov         eax,0CCCCCCCCh  
0041230D  rep stos    dword ptr es:[edi]  
0041230F  pop         ecx                      // 出栈参数 : ecx - 变量c地址    
00412310  mov         dword ptr [this],ecx  // 参数赋值 : ecx - 隐藏变量this指针; 此时this指针指向mian函数中变量c地址。
   118:     {
   119:         this->nNum = nNum;
00412313  mov         eax,dword ptr [this]  
00412316  mov         ecx,dword ptr [nNum]  
00412319  mov         dword ptr [eax],ecx  
   120:     }
        }
   
   

 

006 this指针原理

标签:argv   char   出栈   div   ptr   public   code   参数   int   

原文地址:https://www.cnblogs.com/huafan/p/11619445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!