0

スレッドによって現在実行中の .so のファイル パス/ファイル名を取得する方法はありますか? プログラムは c++ で書かれており、64 ビットの Linux 3.0 マシンで実行されます。

4

2 に答える 2

1

(プロセス内から)ファイル/proc/self/mapsを順番に読み取って、現在のプロセスのメモリマッピング(共有オブジェクトのメモリマッピングを含む)を取得できます。

次に、プログラムカウンター(または呼び出し元のカウンター)を取得して、それがどのセグメントにあるかを見つけることができます。おそらくbacktrace、またはGCCbuiltin_return_addressが関連しています。

この関数を使用することもできdladdrます。

proc(5)backtrace(3)dladdr(3)のマニュアルページ、およびこの回答も参照してください。

補遺

シグナルハンドラーから、 sigaction(2)とを使用してシグナルが送信されたときにプログラムカウンターを取得できますSA_SIGINFOsa_sigaction関数ポインタは、ucontext_tプログラムカウンタレジスタを取得できるから取得します(マシンに依存するCコードを使用)。その後、あなたはそれを処理することができます。

GCCが何をしているのかを詳しく調べることをお勧めします

于 2013-02-28T09:58:43.807 に答える
0

最後に、プロセスによってロードされたすべての共有ライブラリのリストを取得することだと思います。pmapまたはを使用してこれを行うことができますlsof

于 2013-02-28T09:59:38.387 に答える