c++中的类成员函数中有个隐含的this指针做参数,参数传递过程原来是这样的(VC++6.0):
测试代码:
#include <iostream>
using namespace std;
class A {
public:
void f() {
cout << "A::f" << endl;
}
};
int main() {
A a;
a.f();
return 0;
}
a.f();
lea ecx, [ebp - 4] ;这里便是a 的地址,也就是一个this指针。
call @ILT+0(A::f) (00401005)
...
00401005 E9 C6 03 00 00 jmp A::f (004013d0)
...
6: void f() {
004013D0 55 push ebp
004013D1 8B EC mov ebp,esp
004013D3 83 EC 44 sub esp,44h
004013D6 53 push ebx
004013D7 56 push esi
004013D8 57 push edi
004013D9 51 push ecx ;上面已经知道了,ecx中保存的是this指针
004013DA 8D 7D BC lea edi,[ebp-44h]
004013DD B9 11 00 00 00 mov ecx,11h
004013E2 B8 CC CC CC CC mov eax,0CCCCCCCCh
004013E7 F3 AB rep stos dword ptr [edi]
004013E9 59 pop ecx ;弹栈,ecx中是刚才压入的this指针。
004013EA 89 4D FC mov dword ptr [ebp-4],ecx ;把this指针放在为函数临时开辟的栈空间中,就像正常传过来的参数一模一样。
又写了几个复杂点的类,发现在调用普通成员函数的时候都做了如此处理。