解決: vtable の 0 要素目の一個後ろに std::type_info へのポインタがある
C* c = new D(); void** vtable = *(void***)c; std::type_info* ti = (std::type_info*)vtable[-1]; printf("%d\n", &typeid(*c) == ti); // 1 printf("%d\n", &typeid(C) == ti); // 0 printf("%d\n", &typeid(D) == ti); // 1
レイアウトについてもっと詳しく知りたければ g++ -fdump-class-hierarchy など