[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++了解的人肯定知道它就是cx,this只是编译器给起的名字,在另一个反编译器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 F8、8B 45 F8就可以了,关于mov指令的可以去查看8086的汇编书就能得到目的和源是一个东西。
学习高层的东西太多了,发现真得变木了。。。。。。