C ++:如何找出v-table的布局/地址?

时间:2014-01-17 13:17:37

标签: c++ polymorphism vtable

我想尝试看看我的编译器如何为多态类安排v表 - 查看函数地址等。在C ++代码中执行此操作的最佳方法是什么?

例如,如果我覆盖父类的方法,则函数地址应该是子类中的地址。如果我没有覆盖,则函数地址将是父类中的地址。

1 个答案:

答案 0 :(得分:0)

如果没有黑客攻击,您无法获取虚拟功能的地址或其他有关vmt的信息。 在大多数情况下,类内部看起来像这样的结构:

struct ClassInternal
{
   void* vmt; // this field generate and add by compile automatically if class need vmt
   int field0;
   ...
};

有些编译器按照在标题中定义的顺序对VMT中的地址函数进行排序(但可以随时更改),首先是父类函数然后是子类。