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は役に立ちません。
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は役に立ちません。
を使用しdladdrます。ドキュメンテーションはこちら。
私が知っている唯一の方法は、/proc/self/maps(および/またはおそらくsmaps)の内容を解析し、シンボルアドレスを使用して、関数が存在するマップされたモジュールの境界.so(開始とそのサイズ)から計算することです。
注:は、現在のプロセスの(IDを持つ)メタ情報/proc/selfへの(Linuxの)シンボリックリンクです。<pid>/proc/<pid>
使用できるこの情報へのプログラミングインターフェイスがある可能性があります。
編集:ああ、dladdr()そのインターフェースもそうでしょう。
それ自体ではありません。dlopen()シンボルが/経由でアクセスされる代わりにコンパイルされた場合、dlsym()返されるハンドルはありません。(ハンドルの抽象化はdlsym()、シンボルをロードする場所を細かく制御できるようにするためだけに存在します。リンカー スクリプトを介する場合を除いて、元のリンクに対するそのような制御はありません。) イベントの通常の過程では、オブジェクトは単純にopen()ed およびmmap()ed であり、その他の詳細は次のとおりです。内に隠され、および へのパラメータをld.so介して間接的にのみアクセスできます。を使用している場合は、ハンドルを追跡する必要があります。RTLD_DEFAULTRTLD_NEXTdlsym()dlopen()