汇编代码分析

原来代码:

#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              

  

posted @ 2013-03-03 10:30  hailong  阅读(973)  评论(0)    收藏  举报