一简单c++程序之反汇编

#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;
    
}
反汇编后
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;

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










来自为知笔记(Wiz)


posted on   笨拙的菜鸟  阅读(2971)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示