调用类成员函数:
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