一简单c++程序之反汇编
2016-08-10 00:47
375 查看
#include<iostream>
using namespace std;
class point3d;
class point2d;
class point3d
{
private:int x; int y; int z;
public:
point3d(int a = 0, int b = 0, int c = 0) :x(a), y(b), z(c) {}
};
class point2d
{
int a;
int b;
public:
point2d(int x=0,int y=0):a(x),b(y){}
operator point3d()
{
return{ a,b,0 };
}
};
int main()
{
point2d z;
point3d q = z;
return 0;
}
[/code]反汇编后point 2d z:(将调用构造函数push 0(压入2个参数罢了)push 0lea ecx,[z] (将z对象的地址保存到ecx中)call point2d::point2d (0C01348h)
mov dword ptr [this],ecx .将ecx(z对象的地址).保存到this指针当中
mov eax,dword ptr [this] .将z对象的地址赋给eaxmov ecx,dword ptr [x]; 将变量x的值取出来保存到ecx中mov dword ptr [eax],ecx..将ecx=0赋给对象z的低4位(也就是a)mov eax,dword ptr [this].将对象的地址赋给eaxmov ecx,dword ptr [y] 将变量y的值给ecxmov dword ptr [eax+4],ecx 将y的值赋给高4位对象的地址(也就是b)mov eax,dword ptr [this],将对象的地址给eax作为返回值
point3d q =z;
008538B4 lea eax,[q] ;将q的地址赋给eax
008538B7 pusheax ;压栈.作为参数
008538B8 lea ecx,[z] ;将z的地址赋给ecx
008538BB callpoint2d::operator point3d (085133Eh)
[/code]
00853380 pushebp
00853381 mov ebp,esp
00853383 sub esp,0CCh
00853389 pushebx
0085338A pushesi
0085338B pushedi
0085338C pushecx
0085338D lea edi,[ebp-0CCh]
00853393 mov ecx,33h
00853398 mov eax,0CCCCCCCCh
0085339D rep stosdword ptr es:[edi]
0085339F pop ecx ;
008533A0 mov dword ptr [this],ecx ;将 point2d z的地址赋给了this指针
return{ a,b,0 };
008533A3 push0 ;0压栈
008533A5 mov eax,dword ptr [this]
008533A8 mov ecx,dword ptr [eax+4] ;将z的a变量的值赋给ecx
008533AB pushecx ;ecx压栈
008533AC mov edx,dword ptr [this]
008533AF mov eax,dword ptr [edx] ;将a的值赋给了eax中
008533B1 pusheax ;eax压栈
008533B2 mov ecx,dword ptr [ebp+8] ;取出q的地址
008533B5 callpoint3d::point3d (0851357h) ;point3d(一个q的地址.参数.3个变量参数)
008533BA mov eax,dword ptr [ebp+8] ;将q的地址取出来.作为返回值
}
[/code]
来自为知笔记(Wiz)
相关文章推荐
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3)
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3)
- C++反汇编揭秘1 一个简单的C++程序反汇编解析
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3)
- 转:C++反汇编揭秘1 一个简单的C++程序反汇编解析
- C++反汇编揭秘1 一个简单的C++程序反汇编解析
- 个简单C++程序反汇编解析 (Rev. 3)
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3) - [C/C++]
- 简单的C++程序 汇编分析
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3)
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3)(转)
- C++反汇编揭秘:一个简单的C++程序反汇编解析
- Linux下最简单的汇编程序
- [分享] Linux下用Anjuta写个Hello World 的C++程序竟如此简单!
- 一个简单封装用户命令的C++程序
- Java版本和C++版本的简单Stack程序
- 用 C++ 创建简单的 Win32 服务程序
- 用C++编写简单绘图语言的语法分析器——程序清单
- 用C++编写简单绘图语言的词法分析器——程序清单
- 简单的响铃程序(汇编实现)