首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:如何查看vptr/ vtable内容

C++:如何查看vptr/ vtable内容
EN

Stack Overflow用户
提问于 2014-11-28 12:54:31
回答 1查看 2.2K关注 0票数 0

每个具有虚拟函数的C++对象都有一个指向vtable的vptr。我如何才能看到这个vptr是什么,以及它所指向的内容?我知道这是依赖于编译器的,它可以把vptr放在对象内存空间的任何地方。但是有没有什么我可以找到它的地方呢?

干杯。

EN

回答 1

Stack Overflow用户

发布于 2016-08-11 14:53:48

在这个特定的例子中,C有一个vtable,而A和B没有。您可以通过对C的成员函数进行内联,从而实际发出vtable,并纠正其他编译错误: extern "C“int put(const char *);

代码语言:javascript
复制
struct A { virtual void func_1() = 0; };
struct B { virtual void func_2() = 0; };

struct C : A, B
{
  void func_1();
  void func_2();
};

..。编译为目标文件,然后查看符号:

代码语言:javascript
复制
$ gcc -c test.cc
$ nm test.o | c++filt
                 U puts
0000000000000000 T C::func_1()
000000000000001a T C::func_2()
0000000000000033 T non-virtual thunk to C::func_2()
0000000000000000 V typeinfo for A
0000000000000000 V typeinfo for B
0000000000000000 V typeinfo for C
0000000000000000 V typeinfo name for A
0000000000000000 V typeinfo name for B
0000000000000000 V typeinfo name for C
0000000000000000 V vtable for C
                 U vtable for __cxxabiv1::__class_type_info
                 U vtable for __cxxabiv1::__vmi_class_type_info
    void C::func_1() { puts("func_1"); }
    void C::func_2() { puts("func_2"); }

通过以上步骤,您可以找到它所指向的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27182132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档