我试图通过它在内存中的地址来获取符号名称。我使用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 中的所有其他函数都由 找到。dlopendlsym_ZTVN4QGst13PropertyProbeEdladdr