如何找到函数open()所在的库?比如,实际的名称" xxxxxx.so"包含该功能的文件?另外,我是否可以获得其他功能的信息?
答案 0 :(得分:0)
不需要知道库我不知道如何找到给定函数所在的库,其中 dlopen需要
如果 file 是空指针, dlopen ()将返回一个 当前运行的过程映像的全局符号表句柄。 此符号表句柄应提供对来自的符号的访问 由原始组成的有序可执行对象文件集 程序映像文件,程序加载的任何可执行目标文件 由该进程文件指定的启动(例如,共享 库),以及使用加载的可执行对象文件集 使用RTLD_GLOBAL标志 dlopen ()操作。 ...
但如果你真的想知道:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main()
{
// We don't need to know the library for dlopen():
void *handle = dlopen(NULL, RTLD_NOW);
if (!handle) puts(dlerror()), exit(1);
void *p = dlsym(handle, "open");
char *s = dlerror();
if (s) puts(s), exit(1);
printf("open = %p\n", p);
// But we can find the library with a Glibc extension:
Dl_info info;
if (dladdr(p, &info))
printf("%s contains %s\n", info.dli_fname, info.dli_sname);
}