反汇编 c++类


调用类成员函数:

push  // 参数1

push //参数2

...    //参数n

mov ecx,this or   lea  ecx,xxx  ,   

call xxx // 调用成员函数

在调用成员函数之前必先把对象的首地址(this)赋给ecx:

两个例子

a.setZ(6);
004010DD  push        6    
004010DF  mov         ecx,dword ptr [a] 
004010E2  call        A::setZ (401020h) 



int w = a.getZ();
004010E7  mov         ecx,dword ptr [a] 
004010EA  call        A::getZ (401050h) 

并且就在call的前一句.



访问成员变量就更好说了,  this +8 ,this +c  这样的了



成员函数中访问成员变量:

也是通过this指针 ecx 来访问的,

例如: mov  dword ptr [ecx+4],5 

当然也可以把ecx 赋值到别的东西再来访问:

例如:

mov eax, ecx

mov dword ptr [eax+4],7

这都是一样的:

 

看两个Release版的成员函数的头:

virtual void setA(A &a)
{
004010B0  push        ebp  
004010B1  mov         ebp,esp 
004010B3  sub         esp,8 
004010B6  mov         dword ptr [ebp-8],ecx   // 这个变量就是this


  void setZ(int z)
{
00401020  push        ebp  
00401021  mov         ebp,esp 
00401023  push        ecx  
00401024  mov         dword ptr [ebp-4],ecx // 这个变量就是this


this 到底是 epb-4 呢还是 epb-8 呢, 这个得看这个函数的栈多大, 也就是局部变量的多少,   到底减几其实看  第三句 , esp 减多少,this就是 ebp 减多少. 如果没减就是 -4


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值