我試圖通過其地址在內存中獲取符號名稱由它的地址符號的更多信息。我使用dlfcn.h
int dladdr(void *addr, Dl_info *info)
函數來獲取信息:我如何獲得有關在內存
typedef struct { const char *dli_fname; /* Pathname of shared object that contains address */ void *dli_fbase; /* Address at which shared object is loaded */ const char *dli_sname; /* Name of nearest symbol with address lower than addr */ void *dli_saddr; /* Exact address of symbol named in dli_sname */ } Dl_info;
但是這個功能不能找到符號匹配的地址,並設置dli_sname和saddr爲NULL。
我怎樣才能得到符號的名稱或任何其他信息(種類,屬性等)約在這種情況下,符號?
注意:我試圖找到的符號的名稱是_ZTv0_n24_N4QGst13PropertyProbeD0Ev
。它在QGst::PropertyProbe
類的虛函數表由g++ -fdump-class-hierarchy
上市:
Vtable for QGst::PropertyProbe QGst::PropertyProbe::_ZTVN4QGst13PropertyProbeE: 14u entries ... 80 (int (*)(...))QGst::PropertyProbe::_ZTv0_n24_N4QGst13PropertyProbeD1Ev ...
但它不是由dladdr
通過其地址尋找到共享對象時dlopen
和符號_ZTVN4QGst13PropertyProbeE
的dlsym
並通過列表迭代,我已經得到發現的虛擬函數指針。 v表中的所有其他功能可通過dladdr
找到。
'objdump --syms libQtGStreamer-0.10.so.0' returns'SYMBOL TABLE:no symbols' – aponomarenko 2013-03-15 07:03:11