I am reversing an application for the 3ds which are compiled with ARMCC.
I found the vtables of the key classes and have a problem figuring out how the C++ representation of these was.
Vtable of first base class:
fBase::dtor 0 // no dtorFree fBase::function1 fBase::function2 ... fBase::function13 Vtable of second base class:
sBase::dtor 0 // no dtorFree sBase::function1 fBase::function2 ... sBase::function13 Now the problematic one:
Vtable of Actor class:
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 At the beginning I assumed that these are pure virtual function (Actor::function20-1()=0;) but these "gaps" in the vtables are not "overwritten" by any top level classes and thus the gaps also end up in their vtables.
What causes these empty vtable entries and how'd the C++ representation look like?