c++类实例中.第一个成员是一个指向virtual Routine的函数地址表,类似于ssdt表.类中调用虚函数的时候,会在虚函数表中查找相应的虚函数代码执行地址.
下面一段代码调用虚函数的反汇编代码
00291B54 |. 6A 0F push 0xF
00291B56 |. 6A 0A push 0xA
00291B58 |. 8B45 E0 mov eax,dword ptr ss:[ebp-0x20]
00291B5B |. 8B10 mov edx,dword ptr ds:[eax]
00291B5D |. 8B4D E0 mov ecx,dword ptr ss:[ebp-0x20]
00291B60 |. 8B42 04 mov eax,dword ptr ds:[edx+0x4]
00291B63 |. FFD0 call eax ; TestVirt.CCLA::mul
00291B65 |. 3BF4 cmp esi,esp
00291B67 |. E8 F40C0000 call TestVirt._RTC_CheckEsp
00291B6C |. 6A 05 push 0x5
00291B6E |. 6A 06 push 0x6
00291B70 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-0x20]
00291B73 |. E8 38020000 call TestVirt.CCLA::sub
其中 类TestVirt.CCLA中的 mul函数是虚函数.sub是普通函数.通过这段汇编代码可以发现两个函数的调用的不同.
首先我们知道了指