1. #include<iostream>
  2. using namespace std;
  3. class point3d;
  4. class point2d;
  5. class point3d
  6. {
  7. private:int x; int y; int z;
  8. public:
  9. point3d(int a = 0, int b = 0, int c = 0) :x(a), y(b), z(c) {}
  10. };
  11. class point2d
  12. {
  13. int a;
  14. int b;
  15. public:
  16. point2d(int x=0,int y=0):a(x),b(y){}
  17. operator point3d()
  18. {
  19. return{ a,b,0 };
  20. }
  21. };
  22. int main()
  23. {
  24. point2d z;
  25. point3d q = z;
  26. return 0;
  27. }

反汇编后
point 2d z:(将调用构造函数
push 0(压入2个参数罢了)
push 0
lea ecx,[z] (将z对象的地址保存到ecx中)
call  point2d::point2d (0C01348h)  
mov   dword ptr [this],ecx   .将ecx(z对象的地址).保存到this指针当中
mov   eax,dword ptr [this]  .将z对象的地址赋给eax
mov ecx,dword ptr [x]; 将变量x的值取出来保存到ecx中
mov dword ptr [eax],ecx..将ecx=0赋给对象z的低4位(也就是a)
mov eax,dword ptr [this].将对象的地址赋给eax
mov ecx,dword ptr [y] 将变量y的值给ecx
mov dword ptr [eax+4],ecx 将y的值赋给高4位对象的地址(也就是b)
mov eax,dword ptr [this],将对象的地址给eax作为返回值


point3d q =z;

  1. 008538B4 lea eax,[q] ;将q的地址赋给eax
  2. 008538B7 push eax ;压栈.作为参数
  3. 008538B8 lea ecx,[z] ;将z的地址赋给ecx
  4. 008538BB call point2d::operator point3d (085133Eh)
  1. 00853380 push ebp
  2. 00853381 mov ebp,esp
  3. 00853383 sub esp,0CCh
  4. 00853389 push ebx
  5. 0085338A push esi
  6. 0085338B push edi
  7. 0085338C push ecx
  8. 0085338D lea edi,[ebp-0CCh]
  9. 00853393 mov ecx,33h
  10. 00853398 mov eax,0CCCCCCCCh
  11. 0085339D rep stos dword ptr es:[edi]
  12. 0085339F pop ecx ;
  13. 008533A0 mov dword ptr [this],ecx ;将 point2d z的地址赋给了this指针
  14. return{ a,b,0 };
  15. 008533A3 push 0 ;0压栈
  16. 008533A5 mov eax,dword ptr [this]
  17. 008533A8 mov ecx,dword ptr [eax+4] ;将z的a变量的值赋给ecx
  18. 008533AB push ecx ;ecx压栈
  19. 008533AC mov edx,dword ptr [this]
  20. 008533AF mov eax,dword ptr [edx] ;将a的值赋给了eax中
  21. 008533B1 push eax ;eax压栈
  22. 008533B2 mov ecx,dword ptr [ebp+8] ;取出q的地址
  23. 008533B5 call point3d::point3d (0851357h) ;point3d(一个q的地址.参数.3个变量参数)
  24. 008533BA mov eax,dword ptr [ebp+8] ;将q的地址取出来.作为返回值
  25. }








一简单c++程序之反汇编的更多相关文章

  1. Linux下简单C语言小程序的反汇编分析

    韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOO ...

  2. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  3. 用python开发简单ftp程序

    根据alex老师视频开发的简单ftp程序,只能实现简单的get功能 ftp客户端程序: #!/usr/bin/env python #_*_ coding:utf-8 _*_ import socke ...

  4. 关于SIGSLOT的一个简单的程序

    废话少说直接看代码即可,这只是一个简单的程序,可以帮我们简单地明白SIGSLOT是怎么回事.至于深入研究自己去百度吧. #include "sigslot.h" using nam ...

  5. 关于《数据格式修改》的简单应用程序(C语言)

    关于<数据格式修改>的简单应用程序(C语言) 至亲爱的博友: 大家好,好久不见了.由于博主还是一名大学在校生,不可避免的需要和指导教师共同完成一些项目,因此前一段时间暂时停止了博客的更新. ...

  6. 简单购物车程序(Python)

    #简单购物车程序:money_all=0tag=Trueshop_car=[]shop_info={'apple':10,'tesla':100000,'mac':3000,'lenovo':3000 ...

  7. 基于C语言libvirt API简单小程序

    libvirt API简单小程序 1.程序代码如下 #include<stdio.h> #include<libvirt/libvirt.h> int getDomainInf ...

  8. 图解简单C程序的运行时结构

    程序在内存中的存储分为三个区域,分别是动态数据区.静态数据区和代码区.函数存储在代码区,全局变量以及静态变量存储在静态数据区,而在程序执行的时候才会在动态数据区产生数据.程序执行的本质就是代码区的指令 ...

  9. MFC制作简单通讯录程序

    学习c++和MFC一段时间了,苦于没有项目实战,所以自己写了一个简单的简单通讯录程序,以前用c#写简单很多,例程是这本书上的实例,我的第一个winform程序也是从这本书上学的,总结c#写的话更简单, ...

随机推荐

  1. kafka的初认识

    学习地址: http://www.jikexueyuan.com/course/1716_3.html?ss=1 http://www.jikexueyuan.com/course/kafka/ zo ...

  2. w3resource_MySQL练习:Basic_select_statement

    w3resource_MySQL练习题:Basic_select_statement 1. Write a query to display the names (first_name, last_n ...

  3. MongoDB之Replica Sets环境搭建

    最近学习MongoDB,这两天在搭建复制集的时候碰到了不少问题,也踩了好多坑,现在在这里记录下来,以供自己和他人参考 (因为本人是初学者,所以遇到的问题也会比较初级,所以本文也比较适合初学者查阅) 背 ...

  4. POJ:1330-Nearest Common Ancestors(LCA在线、离线、优化算法)

    传送门:http://poj.org/problem?id=1330 Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K ...

  5. poj 3280 回文字符串问题 dp算法

    题意:给一个字符串,构成回文(空也是回文) 其中增删都需要代价.问:代价最少? 思路:把字符串s变空  dp[i][j]表示变成回文的最小代价 for(i=m-1;i>=0;--i)       ...

  6. src与href的区别

    href: 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接. src:是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请求src资源时会将其 ...

  7. Appscan安全漏洞扫描使用(转)

    这里主要分享如何使用AppScan对一大项目的部分功能进行安全扫描. ----------------------------------------------------------------- ...

  8. 用Python表达对Android的想法

    组员:喻航,张子东 视频:点我 #DISCARD ANDROID TODAY! import turtle import turtle as gui #setting turtle.screensiz ...

  9. AtCoder Regular Contest 064 F - Rotated Palindromes

    Problem Statement Takahashi and Aoki are going to together construct a sequence of integers. First, ...

  10. Convolutional Networks for Image Semantic Segmentation

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52857657 把前段时间自己整理的一个 ...