在C++中,使用关键字virtual声明为虚函数。ios
示例C++源码数组
汇编代码函数
1.构造函数 this
mov [ebp-8], ecx ;=>保存this指针 mov eax, [ebp-8] ;=>eax得到this指针 mov dword ptr [eax], offset ??_7CVirtual@@6B@ ; const CVirtual::`vftable' ;=>虚表指针初始化
2.析构函数spa
mov [ebp-4], ecx ;=>保存this指针 mov eax, [ebp-4] ;=>eax得到this指针 mov dword ptr [eax], offset ??_7CVirtual@@6B@ ; const CVirtual::`vftable' =>虚表指针重置 push offset aCvirtual ; "~CVirtual!"
3.虚函数调用指针
pVirtual->SetNumber(10); code
push 0Ah ;=>参数10压栈 mov eax, [ebp-18h] ;=>eax为this指针 mov edx, [eax] ;=>edx为虚表指针 mov ecx, [ebp-18h] ;=>ecx传递this指针 mov eax, [edx+4] ;=>虚函数SetNumber的地址=虚表+offset 4 call eax