没有libc函数可以做到这一点。但是,您可以自己编写(或从readelf之类的工具复制/粘贴代码)。
在Linux上,
dlopen()返回
link_map结构的地址,该结构的成员名为
l_addr,指向存储的共享库的基址(假设您的系统没有随机分配共享库的位置,并且您的库尚未预链接)。
在Linux上,办法找到基地址(地址
Elf*_Ehdr)是使用
dl_iterate_phdr()后
dlopen()荷兰国际集团的库。
有了ELF标头,您应该能够通过首先定位
Elf*_Phdrtype
PT_DYNAMIC,然后定位
DT_SYMTAB,
DT_STRTAB条目,并迭代动态符号表中的所有符号,来遍历导出的符号列表(动态符号表)。使用
/usr/include/elf.h来指导你。
另外,您可以使用libelf,我个人不太了解。
但是,请注意,您将获得已定义函数的列表,但不知道如何调用它们。



