0

関数 open() があるライブラリを見つけるにはどうすればよいですか? 同様に、その関数を含む実際の「xxxxxx.so」ファイルの名前は? また、通常、他の機能についてこの情報を取得できる場所はありますか?

4

1 に答える 1

0

dlopen に必要な、特定の関数が含まれているライブラリを見つける方法がわかりませんでした。

次の場合、ライブラリを知る必要はありませんdlopen()

fileが null ポインターの場合、 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 に答える