Я предполагаю, что это специфично для реализации, но для armv7, arm64 и x86_64 строит с использованием libstdС++ и libС++ (gcc или clang), кажется, что vtables всегда имеет 8 байтов (16 на 64-битных) отступов в начале, и выборка vtable обычно выглядит примерно так:
ldr.w r0, <address of vtable>
adds r0, 0x8
str r0, [r1] ; where r1 is the instance
И vtable выглядит примерно так:
vtable+0x00: 0x00000000
vtable+0x04: 0x00000000
vtable+0x08: 0xfirstfunc
vtable+0x0c: 0xsecondfunc
vtable+0x10: 0xthirdfunc
и т.д...
Кто-нибудь знает, почему это?