一个多态类的汇编代码。

class CBase
{
public:
 virtual void show() = 0;
protected:
private:
};


class CBaseA : public CBase
{
public:
 virtual void show()
 {
  ;
 }

 void ShowInfo()
 {
  ;
 }
};

 

 

int _tmain(int argc, _TCHAR* argv[])
{
 CBaseA baseA;
 CBase *base = &baseA;

 baseA.show();
 baseA.ShowInfo();

 base->show();

 return 0;
}

 

 

//Debug

int _tmain(int argc, _TCHAR* argv[])
{
 012A1410  push        ebp 
  012A1411  mov         ebp,esp
  012A1413  sub         esp,0D8h
  012A1419  push        ebx 
  012A141A  push        esi 
  012A141B  push        edi 
  012A141C  lea         edi,[ebp-0D8h]
 012A1422  mov         ecx,36h
  012A1427  mov         eax,0CCCCCCCCh
  012A142C  rep stos    dword ptr es:[edi]
 CBaseA baseA;
 012A142E  lea         ecx,[baseA]
 012A1431  call        CBaseA::CBaseA (12A1118h)
  CBase *base = &baseA;
 012A1436  lea         eax,[baseA]
 012A1439  mov         dword ptr [base],eax

  baseA.show();
 012A143C  lea         ecx,[baseA]
 012A143F  call        CBaseA::show (12A1195h)
  baseA.ShowInfo();
 012A1444  lea         ecx,[baseA]
 012A1447  call        CBaseA::ShowInfo (12A10BEh)

  base->show();
 012A144C  mov         eax,dword ptr [base]
 012A144F  mov         edx,dword ptr [eax]
 012A1451  mov         esi,esp
  012A1453  mov         ecx,dword ptr [base]
 012A1456  mov         eax,dword ptr [edx]
 012A1458  call        eax 
  012A145A  cmp         esi,esp
  012A145C  call        @ILT+360(__RTC_CheckEsp) (12A116Dh)

  return 0;
 012A1461  xor         eax,eax
}

 

 

 

//Release

int _tmain(int argc, _TCHAR* argv[])
{
00151020  push        ecx 
 CBaseA baseA;
 CBase *base = &baseA;

 baseA.show();
00151021  mov         ecx,dword ptr [__imp_std::cout (152038h)]
00151027  push        offset string L"" (15211Ch)
0015102C  mov         dword ptr [esp+4],offset CBaseA::`vftable' (152124h)
00151034  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (15203Ch)]
 baseA.ShowInfo();
0015103A  mov         ecx,dword ptr [__imp_std::cout (152038h)]
00151040  push        offset string L"" (15211Ch)
00151045  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (15203Ch)]

 base->show();
0015104B  mov         eax,dword ptr [esp]
0015104E  mov         edx,dword ptr [eax]
00151050  lea         ecx,[esp]
00151053  call        edx 

 return 0;
00151055  xor         eax,eax
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值