2

像 dladdr 这样的东西给了我一个共享对象的动态库句柄,或者一种从共享对象的基地址获取句柄的方法。包含共享对象的文件可能已被移动或删除,所以不,我不能 dlopen() dladdr 给出的文件名。

4

1 回答 1

1

glibc 的 dlopen 句柄基于 link_map。我可以迭代所有的link_map,看看是否有一个l_addr 等于dladdr 给出的那个。该链接映射的地址是句柄。

Dietlibc 也使用 link_map 作为句柄。

对于 uClibc,还有另一个结构 - dyn_elf。它包含一个指向链接映射的指针。全局变量 _dl_symbol_tables 有一个指向 dyn_elf 链表头部的指针。

仿生使用自己的结构,其中包含 struct link_map 作为成员(不是指针)。

于 2013-05-12T10:52:09.823 回答