zoukankan      html  css  js  c++  java
  • 汇编代码分析

    原来代码:

    #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              
    

      

  • 相关阅读:
    远程视频监控之应用篇(mjpg-streamer)
    C语言存储类型
    基于Qt的wifi智能小车的制作(一)
    libevent和基于libevent的网络编程
    fdisk 分区格式化为ext4格式分区
    Makefile 中:= ?= += =的区别
    【计算机网络】详解网络层(二)ARP和RARP
    Nginx 反向代理 负载均衡 虚拟主机配置
    C# 对文本文件的几种读写方法总结
    Visual Studio中Image Watch的使用
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2941273.html
Copyright © 2011-2022 走看看