how are virtual tables stored in memory? their layout?
e.g.
class A{
public:
virtual void doSomeWork();
};
class B : public A{
public:
For GCC compiler in Linux run:
g++ -fdump-class-hierarchy example.h
The output is:
Vtable for A A::_ZTV1A: 3u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI1A) 16 (int (*)(...))A::doSomeWork Class A size=8 align=8 base size=8 base align=8 A (0x7fb76785a4e0) 0 nearly-empty vptr=((& A::_ZTV1A) + 16u) Vtable for B B::_ZTV1B: 3u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI1B) 16 (int (*)(...))B::doSomeWork Class B size=8 align=8 base size=8 base align=8 B (0x7fb7678510d0) 0 nearly-empty vptr=((& B::_ZTV1B) + 16u) A (0x7fb76785a540) 0 nearly-empty primary-for B (0x7fb7678510d0)
Also I've created the vtable-dumper tool to list contents of virtual tables in the shared objects. With this tool you don't need to compile headers, just run it on the object:
vtable-dumper SHLIB