1

Win32 と同じ:

GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)(void*)(myFunc), &h);

http://www.kernel.org/doc/man-pages/online/pages/man3/dlsym.3.htmlは役に立ちません。

4

3 に答える 3

2

を使用しdladdrます。ドキュメンテーションはこちら

于 2012-04-09T05:15:50.557 に答える
0

私が知っている唯一の方法は、/proc/self/maps(および/またはおそらくsmaps)の内容を解析し、シンボルアドレスを使用して、関数が存在するマップされたモジュールの境界.so(開始とそのサイズ)から計算することです。

注:は、現在のプロセスの(IDを持つ)メタ情報/proc/selfへの(Linuxの)シンボリックリンクです。<pid>/proc/<pid>

使用できるこの情報へのプログラミングインターフェイスがある可能性があります。

編集:ああ、dladdr()そのインターフェースもそうでしょう。

于 2012-04-09T02:48:28.357 に答える
0

それ自体ではありません。dlopen()シンボルが/経由でアクセスされる代わりにコンパイルされた場合、dlsym()返されるハンドルはありません。(ハンドルの抽象化はdlsym()、シンボルをロードする場所を細かく制御できるようにするためだけに存在します。リンカー スクリプトを介する場合を除いて、元のリンクに対するそのような制御はありません。) イベントの通常の過程では、オブジェクトは単純にopen()ed およびmmap()ed であり、その他の詳細は次のとおりです。内に隠され、および へのパラメータをld.so介して間接的にのみアクセスできます。を使用している場合は、ハンドルを追跡する必要があります。RTLD_DEFAULTRTLD_NEXTdlsym()dlopen()

于 2012-04-09T02:36:26.743 に答える