原来代码:



#include <boost/thread.hpp>
#include <iostream>

class Base
{
public:
virtual void Do() = 0;
};

class Derived1: public Base
{
public:
virtual void Do()
{
std::cout << "Derived1:Do\n";
}
};
class Derived2: public Base
{
public:
virtual void Do()
{
std::cout << "Derived1:Do\n";
}
};

int main()
{
Base* lpBase = new Derived1();
lpBase->Do();
return 0;
}


 debug反汇编后:



int main()
{
00517770 push ebp
00517771 mov ebp,esp
00517773 sub esp,0DCh
00517779 push ebx
0051777A push esi
0051777B push edi
0051777C lea edi,[ebp-0DCh]
00517782 mov ecx,37h
00517787 mov eax,0CCCCCCCCh
0051778C rep stos dword ptr es:[edi]
Base* lpBase = new Derived1();
0051778E push 4
00517790 call operator new (5044A9h)
00517795 add esp,4
00517798 mov dword ptr [ebp-0D4h],eax
0051779E cmp dword ptr [ebp-0D4h],0
005177A5 je main+4Ah (5177BAh)
005177A7 mov ecx,dword ptr [ebp-0D4h]
005177AD call Derived1::Derived1 (50AF84h)
005177B2 mov dword ptr [ebp-0DCh],eax
005177B8 jmp main+54h (5177C4h)
005177BA mov dword ptr [ebp-0DCh],0
005177C4 mov eax,dword ptr [ebp-0DCh]
005177CA mov dword ptr [lpBase],eax
lpBase->Do();
005177CD mov eax,dword ptr [lpBase]
005177D0 mov edx,dword ptr [eax]
005177D2 mov esi,esp
005177D4 mov ecx,dword ptr [lpBase]
005177D7 mov eax,dword ptr [edx]
005177D9 call eax
005177DB cmp esi,esp
005177DD call @ILT+19470(__RTC_CheckEsp) (506C13h)
return 0;
005177E2 xor eax,eax
}
005177E4 pop edi
005177E5 pop esi
005177E6 pop ebx
005177E7 add esp,0DCh
005177ED cmp ebp,esp
005177EF call @ILT+19470(__RTC_CheckEsp) (506C13h)
005177F4 mov esp,ebp
005177F6 pop ebp
005177F7 ret