0

如何找到函数 open() 所在的库?比如,包含该函数的实际“xxxxxx.so”文件的名称?另外,是否有一个地方我通常可以为其他功能获取此信息?

4

1 回答 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 回答