我正在反转使用 ARMCC 编译的 3ds 应用程序。
我找到了关键类的 vtables 并且在弄清楚这些的 C++ 表示如何时遇到了问题。
第一个基类的vtable:
fBase::dtor
0 // no dtorFree
fBase::function1
fBase::function2
...
fBase::function13
第二个基类的Vtable:
sBase::dtor
0 // no dtorFree
sBase::function1
fBase::function2
...
sBase::function13
现在有问题的一个:
Actor类的Vtable:
Actor::dtor
0 // no dtorFree
sBase::function1
fBase::function2
... (3-12)
sBase::function13
0 // gap in vtable?
Actor::function14
Actor::function15
... (16-19)
Actor::function20
0 // gap in vtable?
Actor::function21
Actor::function22
... (23-34)
Actor::function35
一开始我假设这些是纯虚函数(Actor::function20-1()=0;)但是虚表中的这些“差距”没有被任何顶级类“覆盖”,因此这些差距也最终出现在他们的虚拟表。
是什么导致这些空的 vtable 条目以及 C++ 表示是什么样的?