如何找到函数 open() 所在的库?比如,包含该函数的实际“xxxxxx.so”文件的名称?另外,是否有一个地方我通常可以为其他功能获取此信息?
问问题
711 次
1 回答
0
我不知道如何找到给定函数所在的库,这是 dlopen 所必需的
不需要了解库dlopen()
:
如果file是空指针,dlopen () 将返回当前运行的进程映像的全局符号表句柄。该符号表句柄应提供对一组有序可执行目标文件的符号的访问,这些可执行目标文件由原始程序映像文件、在程序启动时加载的由该进程文件指定的任何可执行目标文件(例如,共享库),以及使用带有 RTLD_GLOBAL 标志的dlopen () 操作加载的可执行目标文件集 。…</p>
但如果你真的想知道:
#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);
}
于 2017-05-17T11:09:23.130 回答