スレッドによって現在実行中の .so のファイル パス/ファイル名を取得する方法はありますか? プログラムは c++ で書かれており、64 ビットの Linux 3.0 マシンで実行されます。
質問する
1805 次
2 に答える
1
(プロセス内から)ファイル/proc/self/maps
を順番に読み取って、現在のプロセスのメモリマッピング(共有オブジェクトのメモリマッピングを含む)を取得できます。
次に、プログラムカウンター(または呼び出し元のカウンター)を取得して、それがどのセグメントにあるかを見つけることができます。おそらくbacktrace
、またはGCCbuiltin_return_addressが関連しています。
この関数を使用することもできdladdr
ます。
proc(5)、backtrace(3)、dladdr(3)のマニュアルページ、およびこの回答も参照してください。
補遺
シグナルハンドラーから、 sigaction(2)とを使用してシグナルが送信されたときにプログラムカウンターを取得できますSA_SIGINFO
。sa_sigaction
関数ポインタは、ucontext_t
プログラムカウンタレジスタを取得できるから取得します(マシンに依存するCコードを使用)。その後、あなたはそれを処理することができます。
GCCが何をしているのかを詳しく調べることをお勧めします
于 2013-02-28T09:58:43.807 に答える
0
最後に、プロセスによってロードされたすべての共有ライブラリのリストを取得することだと思います。pmap
またはを使用してこれを行うことができますlsof
。
于 2013-02-28T09:59:38.387 に答える