[this]是什么?

[this]是什么?

Auhor:zfive5(zidong)

Email:zfive5@yahoo.com.cn

 

前些日子房东要涨价,干脆就搬到公司宿舍来住,从年前到现在高兴和不高兴的事情也一个个发生,现在项目开始忙开了(开始加班,人在忙的时候可以淡忘一些东西),仿佛回到了3年前,工作基本还能应付,但每天还得工作到很晚,经历这次搬家决定以后借书看,一来可以省钱,二来发现这样看书更快了,三来发现将来搬家会很方便的,不会发生邮寄八个大箱子回天津挨家人唠叨.

 

vs2005下看它的一段汇编代码,发现这个很有些迷惑,不过很快解惑了

 

class A

{

public:

int i;

A()

004114A0 55                push        ebp 

004114A1 8B EC             mov         ebp,esp

004114A3 81 EC CC 00 00 00 sub        esp,0CCh

004114A9 53                push        ebx 

004114AA 56                push        esi 

004114AB 57                push        edi 

004114AC 51                push        ecx

004114AD 8D BD 34 FF FF FF lea         edi,[ebp-0CCh]

004114B3 B9 33 00 00 00    mov         ecx,33h

004114B8 B8 CC CC CC CC    mov         eax,0CCCCCCCCh

004114BD F3 AB             rep stos    dword ptr es:[edi]

004114BF 59                pop         ecx

004114C0 89 4D F8          mov         dword ptr [ebp-8],ecx

     {

       i=0;

004114C3 8B 45 F8          mov         eax,dword ptr [this]

004114C6 C7 00 00 00 00 00 mov         dword ptr [eax],0

     }

004114CC 8B 45 F8          mov         eax,dword ptr [this]

004114CF 5F                pop         edi 

004114D0 5E                pop         esi 

004114D1 5B                pop         ebx 

004114D2 8B E5             mov         esp,ebp

004114D4 5D                pop         ebp 

004114D5 C3                ret

 

}

          

红字【this】是什么,当然如果对了C++了解的人肯定知道它就是cxthis只是编译器给起的名字,在另一个反编译器IDA中汇编出来的代码一切疑惑都会烟消云散了,代码如下:

 

.text:004114A0 A__A            proc near               ; CODE XREF: j_A__Aj

.text:004114A0

.text:004114A0 var_CC          =  dword ptr -0CCh

.text:004114A0 var_8            =  dword ptr -8

.text:004114A0

.text:004114A0                 push    ebp

.text:004114A1                 mov     ebp, esp

.text:004114A3                 sub     esp, 0CCh

.text:004114A9                 push    ebx

.text:004114AA                 push    esi

.text:004114AB                 push    edi

.text:004114AC                 push    ecx

.text:004114AD                 lea     edi, [ebp+var_CC]

.text:004114B3                 mov     ecx, 33h

.text:004114B8                 mov     eax, 0CCCCCCCCh

.text:004114BD                 rep stosd

.text:004114BF                 pop     ecx

.text:004114C0                 mov     [ebp+var_8], ecx

.text:004114C3                 mov     eax, [ebp+var_8]

.text:004114C6                 mov     dword ptr [eax], 0

.text:004114CC                 mov     eax, [ebp+var_8]

.text:004114CF                 pop     edi

.text:004114D0                 pop     esi

.text:004114D1                 pop     ebx

.text:004114D2                 mov     esp, ebp

.text:004114D4                 pop     ebp

.text:004114D5                 retn

.text:004114D5

.text:004114D5 A__A            endp

 

 

这样证实【this】就是【ebp-8】,其实如果学过汇编语言的话,直接分析两个指令89 4D F88B 45 F8就可以了,关于mov指令的可以去查看8086的汇编书就能得到目的和源是一个东西。

 学习高层的东西太多了,发现真得变木了。。。。。。

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值