【发布时间】:2014-11-28 04:54:31
【问题描述】:
每个具有虚函数的 C++ 对象都有一个指向 vtable 的 vptr。我怎样才能看到这个 vptr 是什么,以及它指向的内容?我知道这取决于编译器,它可以将 vptr 放在对象内存空间的任何位置。但是有没有我能找到它是什么?
干杯。
【问题讨论】:
-
你为什么要这样做?
-
“每个具有虚函数的 C++ 对象都有一个指向 vtable 的 vptr。” - C++ 标准本身并没有规定应该如何编排虚拟调度,所以这是真的 - 据我所知 - 所有当前可用的 C++ 编译器和可能仍然如此,但不确定,尤其是在例如在一个翻译单元中编译的更简单的程序,实际上并没有在运行时使用虚拟调度或 RTTI。
-
谢谢。我知道如果程序不需要动态绑定,一些编译器会选择不进行动态绑定。但我的需要是当 vtpr/vtable 存在时如何查看这个指针是什么并查看它的内容。
-
这是我的另一个书签,您可能会喜欢 - 它解释了 VDT 和 RTTI 信息的一种布局标准:Itanium C++ ABI。如果你想“看看这个指针是什么”等。在 gdb 或你使用的任何调试器中四处寻找......