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
}