readelf 查看“派生类”的vtable符号

一、查看 .rodata

c 复制代码
ubuntu@aaa $ readelf -x .rodata a.out

Hex dump of section '.rodata':
  0x00002000 01000200 00000000 02000000 00000000 ................
  0x00002010 20204465 72697665 6420636c 61737320   Derived class
  0x00002020 6f626a65 63742069 73206372 65617465 object is create
  0x00002030 6420616e 64206675 6e637469 6f6e2066 d and function f
  0x00002040 28292069 73206361 6c6c6564 2e000000 () is called....
  0x00002050 37446572 69766564 00344261 736500   7Derived.4Base.

ubuntu@aaa $

二、grep vtable没有结果

ubuntu@aaa$ readelf -x .rodata a.out |grep vtalbe

ubuntu@aaa $

三、虚函数除了声明,还需要定义

c 复制代码
ubuntu@aa $ g++ polymorph.cpp
/usr/bin/ld: /tmp/ccstK1jB.o: 
warning: 
relocation against `_ZTV4Base' in read-only section `.text._ZN4BaseC2Ev[_ZN4BaseC5Ev]'

/usr/bin/ld: /tmp/ccstK1jB.o: 
in function `Base::Base()':
polymorph.cpp:
(.text._ZN4BaseC2Ev[_ZN4BaseC5Ev]+0xf): 
undefined reference to `vtable for Base'

/usr/bin/ld: /tmp/ccstK1jB.o: 
in function `Derived::Derived()':
polymorph.cpp:
(.text._ZN7DerivedC2Ev[_ZN7DerivedC5Ev]+0x1f): 
undefined reference to `vtable for Derived'

/usr/bin/ld: warning: 
creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status

ubuntu@aa $
相关推荐
学逆向的6 小时前
C 堆区内存管理
c语言·开发语言·网络安全
huoyueyi7 小时前
《融天AI-APP从0到1开发实录》
开发语言·lua
xiaoye-duck8 小时前
《C++ 工具库实战》gflags 命令行参数解析库详解
c++·第三方库
OpenAnolis小助手8 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
狂奔的sherry9 小时前
C++ 宏生成访问函数的代价:访问权限、调试和类型检查
c++·宏·编译·预处理器·类型检查
阿尼卡~9 小时前
VS Code 配置 C 语言开发环境(Windows 10/11):从 GCC 安装到运行、断点调试,一篇搞定
c语言·开发语言·windows
划破黑暗的第一缕曙光10 小时前
[C++]:5.STL:string(2)
java·c++·redis
hhhjhl10 小时前
Undici 跨端三方库仓颉适配全流程
java·开发语言·ubuntu
染指111010 小时前
158.Agent-LangGraph-子图(共享状态和不共享状态模式)
开发语言·人工智能·python·ui·agent·agents
wangchunyu11411 小时前
JAVA JVM内存结构与运行时数据区
java·开发语言·jvm