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. Python基础教程2-3:以正确的宽度在居中的“盒子”内打印一个句子

    代码示例:#获取句子长度sentence = input('Plese input a sentence:')#He's very naughty boyscreen_width =100#获取文本的 ...

  2. python入门:if和else的基本用法

    #!/usr/bin/env python # -*- coding:utf-8 -*- #2.X用raw_input,3.X用input #if和else的基本用法 name = input(&qu ...

  3. vue + axios---封装一个http请求

    在使用vue开发时,官方推荐使用axios来请求接口 // axios官方地址 https://github.com/axios/axios 但是axios并不像 vue-resource 一样拥有i ...

  4. 【android】签署应用采用相同证书的用处

    在应用的预期生命周期内,您应使用相同证书签署所有 APK 应用升级:当系统安装应用的更新时,它会比较新版本和现有版本中的证书.如果证书匹配,则系统允许更新.如果您使用不同的证书签署新版本,则必须为应用 ...

  5. 「新手必看」Python+Opencv实现摄像头调用RGB图像并转换成HSV模型

    在ROS机器人的应用开发中,调用摄像头进行机器视觉处理是比较常见的方法,现在把利用opencv和python语言实现摄像头调用并转换成HSV模型的方法分享出来,希望能对学习ROS机器人的新手们一点帮助 ...

  6. URAL - 2065 Different Sums (思维题)

    题意: 给n和k,让你用不小于 k 个不同的数字构成一个长度为n的序列,使得序列中不同的区间和的数目最小. n,k<=500 k-1个数填一些数字的一正一负,这样有些区间和为0. 剩下的都填0. ...

  7. 水题:UVa133-The Dole Queue

    The Dole Queue Time limit 3000 ms Description In a serious attempt to downsize (reduce) the dole que ...

  8. cf 1020 C

    C. Elections time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  9. 实现类似QQ单一账户登录,在另一个地方登录后在原登录窗口提示下线

    首先,使用框架做的最好,可以在框架页直接做一次就好了 再登陆成功后保存session的代码后添加以下代码: 注意:需要引入命名空间using System.Collections; SetApplic ...

  10. JS使用onerror进行默认图像显示,可代替alt

    JS代码 //图像加载出错时的处理 function errorImg(img) { img.src = "默认图片.jpg"; img.onerror = null; } HTM ...