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

标签 c++ polymorphism vtable

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

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

最佳答案

如果没有 hack,您无法获得虚拟函数的地址或有关 vmt 的其他一些信息。 在大多数情况下,类在内部看起来像这样的结构:

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

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

关于C++:如何找出 v 表的布局/地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21187032/

相关文章:

c++ - 与位置无关的代码和 vtable

c++ - vtable:底层算法

c++ - 如何在循环后立即打断点?

c++ - 将动态二维数组中的所有值设置为设定值

c++ - 从多态基指针调用基类方法很慢

c++ - 没有智能指针经验的多态对象的转换类型

c++ - 虚拟类的每个对象是否都有指向 vtable 的指针?

c++ - Win32 : Bring a window to top

c++ - 修改后的 KnapSack 运行时错误

java - 多态java思想