解決: 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 など