Inheritance 类中不相关的虚拟函数表项 我正在浏览一个简单的C++ Windows程序(我没有源代码,只有二进制代码)的VFTS(VMTS),它由VisualStudio编译,并对其进行某种优化。p>

Inheritance 类中不相关的虚拟函数表项 我正在浏览一个简单的C++ Windows程序(我没有源代码,只有二进制代码)的VFTS(VMTS),它由VisualStudio编译,并对其进行某种优化。p>,inheritance,visual-c++,virtual-functions,vmt,Inheritance,Visual C++,Virtual Functions,Vmt,我注意到is使用了继承和多态性。我为程序拥有的每个类找到了structsrttibaseclassarray的位置。在该位置有一个指向struct\u s\u RTTIBaseClassDescriptor的指针数组。基类描述符数组应该为您提供有关当前类派生自的所有类的信息 虚函数(方法)表是包含指向当前类的所有虚函数的指针的表。然而,在一些类的VFT中,我发现了一个指向虚拟方法的指针,该方法实际上属于与当前类无关的另一个类(根据基类数组)。示例如下: ClassA_BaseClassArray

我注意到is使用了继承和多态性。我为程序拥有的每个类找到了struct
srttibaseclassarray
的位置。在该位置有一个指向struct
\u s\u RTTIBaseClassDescriptor
的指针数组。基类描述符数组应该为您提供有关当前类派生自的所有类的信息

虚函数(方法)表是包含指向当前类的所有虚函数的指针的表。然而,在一些类的VFT中,我发现了一个指向虚拟方法的指针,该方法实际上属于与当前类无关的另一个类(根据基类数组)。示例如下:

ClassA_BaseClassArray:
            dd offset ClassA_BaseClassDescriptor
            dd offset ClassB_BaseClassDescriptor ; ClassA inherits from ClassB

ClassB_BaseClassArray:
            dd offset ClassB_BaseClassDescriptor

ClassC_BaseClassArray:
            dd offset ClassC_BaseClassDescriptor

ClassA_VMT: 
            dd offset ClassA_VM1 ; virtual method of ClassA
            dd offset ClassA_VM2
            dd offset ClassB_VM2 ; virtual method of ClassB - override
            dd offset ClassC_VM3 ; virtual method of ClassC - NOTHING TO DO HERE
            dd offset ClassA_VM3
这个例子很短,实际的类有更多的虚方法

在检查了
ClassC_VM3
之后,我注意到它只包含两条指令:

mov    eax, [ecx+10h]
retn
到目前为止,我发现大约有3个VMT与此示例类似,不相关的方法总是这么短

我的问题是:这是什么原因造成的?
ClassC_VM3
的代码是否与某个
ClassA
方法的代码相同,因此编译器只是对其进行了优化?

这可能是由于将具有相同精确机器代码的函数合并为一个函数的优化所致。因为它是一个如此简单的函数,所以很有可能发生这种情况。

这可能是由于优化将具有相同机器代码的函数合并为一个函数造成的。因为它是一个如此简单的函数,所以实现它的可能性很大