在我的C共享庫中,我想要dlopen()另一個共享庫並檢索此庫所導出符號的列表。如何以編程方式列出ELF共享庫符號
有沒有辦法以編程方式做到這一點,而無需運行nm/objdump?
作爲第二個問題:我如何檢索dlopen()後加載的第二個庫的基地址 - 不知道任何符號的名稱(所以我不能運行dlsym!),而不讀取/ proc /自/地圖?
我曾嘗試以下:
struct link_map *imagehandle = (struct link_map*)dlopen(libraryname, RTLD_LOCAL | RTLD_LAZY);
void * fbase = (void*) imagehandle->l_addr;
printf("base addr is %p",fbase)
這將打印
「基地addr是0x6862696c」
然而,該庫沒有位於有:
[/ proc/pid/maps輸出:]
b6d27000-b6d28000 r-xp 00000000 1f:01 1581 mysecondlib.so
b6d28000-b6d29000 r--p 00000000 1f:01 1581 mysecondlib.so
b6d29000-b6d2a000 rw-p 00001000 1f:01 1581 mysecondlib.so
有人建議l_addr不是實際的庫基址,而是可執行頭的偏移量 - 但我不確定如何找到該頭地址。