You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gdb命令x/nfu输出中ZTV、ZTS、ZTI的含义?附C++虚表示例

聊聊GDB里虚表相关的ZTV、ZTS、ZTI符号含义

嘿,这几个符号其实是GCC、Clang这类编译器遵循Itanium C++ ABI标准做的名字修饰(name mangling)结果,用来区分C++里和虚表、RTTI(运行时类型信息)相关的核心结构。结合你给出的Derived类示例,我给你逐个拆解:

ZTV:类的虚表(Virtual Table)

  • 拆解符号逻辑:前缀_Z是C++修饰符号的标志,后面的TV对应Table Virtual,所以ZTV合起来就是虚表的标识。
  • 你示例里的_ZTV7Derived就是Derived类的虚表本身。虚表本质是存储虚函数指针的数组,开头通常会有两个特殊条目:第一个是空指针(不同实现略有差异),第二个是指向类型信息对象(ZTI)的指针,后面才是类的各个虚函数的地址。

ZTS:类型信息结构(Typeinfo Structure)

  • ZTS对应Typeinfo Structure,_ZTS<类名>就是类的RTTI结构的符号名。
  • 这个结构里存着类的核心类型信息,比如类的名称字符串,是typeid操作和dynamic_cast能工作的基础——程序运行时靠它识别对象的实际类型。

ZTI:类型信息对象(Typeinfo Instance)

  • ZTI对应Typeinfo Instance,_ZTI<类名>是类的类型信息实例的符号名。
  • 它相当于ZTS结构的"入口",虚表的第二个条目(跳过开头的空指针后)通常就指向这个ZTI对象,通过它就能关联到对应的ZTS结构,从而拿到完整的类型信息。

举个和你示例匹配的对应关系:
对于Derived类:

  • _ZTV7Derived → Derived的虚表(就是你用x/300xb查看的那个地址)
  • _ZTI7Derived → Derived的类型信息实例(你示例里0x400b38位置的指针指向的就是它)
  • _ZTS7Derived → Derived的类型信息结构(由_ZTI7Derived指向,里面能找到"Derived"这个类名字符串)

内容的提问来源于stack exchange,提问作者JellyHan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:58:47