像dladdr这样的东西给了我一个共享对象的动态库句柄或从共享对象的基地址获取句柄的方法。包含共享对象的文件可能已被移动或删除,所以没有,我不能dlopen()dladdr给出的文件名。
答案 0 :(得分:1)
glibc的dlopen句柄基于link_map。我可以迭代所有的link_map,看看是否有一个l_addr等于dladdr给出的l_addr。 link_map的地址是句柄。
dietlibc也使用link_map作为句柄。
在uClibc的情况下,还有另一个结构--dyn_elf。它包含指向link_map的指针。全局变量_dl_symbol_tables有一个指向dyn_elf链接列表头部的指针。
bionic使用自己的struct,它包含struct link_map作为成员(不是指针)。