我试图通过它在内存中的地址来获取符号名称。我使用int dladdr(void *addr, Dl_info *info)
函数 fromdlfcn.h
来获取信息:
类型定义结构{ 常量字符 *dli_fname; /* 共享对象的路径名 包含地址 */ 无效*dli_fbase;/* 共享对象的地址 已加载 */ 常量字符 *dli_sname; /* 与地址最近的符号名称 低于地址 */ 无效*dli_saddr;/* 命名符号的确切地址 在 dli_sname */ } DL_信息;
但此函数找不到与地址匹配的符号,并将 dli_sname 和 saddr 设置为 NULL。
在这种情况下,如何获取符号名称或有关符号的任何其他信息(种类、属性等)?
注意:我要查找的符号名称是_ZTv0_n24_N4QGst13PropertyProbeD0Ev
. QGst::PropertyProbe
它在类的vtable 中列出g++ -fdump-class-hierarchy
:
QGst::PropertyProbe 的 Vtable QGst::PropertyProbe::_ZTVN4QGst13PropertyProbeE: 14u 个条目 ... 80 (int (*)(...))QGst::PropertyProbe::_ZTv0_n24_N4QGst13PropertyProbeD1Ev ...
但是,当我通过和符号查看共享对象并遍历虚函数指针列表dladdr
时,我没有通过它的地址找到它。v-table 中的所有其他函数都由 找到。dlopen
dlsym
_ZTVN4QGst13PropertyProbeE
dladdr