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?