2017-01-25 18 views
0

実行可能ファイルa.outは共有ライブラリ1.so,2.soおよび3.soをロードします。 3つのライブラリのそれぞれに実装された関数func()があります。 func()が呼び出されたとき、func()のどの実装が実行されているかを特定したいと思います。共有ライブラリを識別する方法

私はltraceを実行可能ファイルのPIDで試してみました。 func()コールのみがリストされますが、共有ライブラリはリストされません。

提案がありますか?

+0

二つの同様の質問に(重複を強要ではなく、私見):のhttp:/ /stackoverflow.com/questions/6538501/linking-two-shared-libraries-with-some-of-the-same-symbols http://stackoverflow.com/questions/29079742/same-symbols- in-different-libraries-and-linking-order – DyZ

+1

関数のアドレスを知っていれば、プロセスメモリマップ( '/ proc//maps')で検索することができます。 –

+0

私は「重複しません」と同意しますが、ライブラリがリンカーに渡された順序を知っていれば、質問は最初のものから 'func'となることを強く示唆しています。 –

答えて

0

使用するSystemTap:LinuxのPERFで

sudo -E stap ./func.stap 

probe process("/path/to/1.so").function("func") 
{ 
    printf("%d: 1.so\n", pid()); 
}  

probe process("/path/to/2.so").function("func") 
{ 
    printf("%d: 2.so\n", pid()); 
}  

probe process("/path/to/3.so").function("func") 
{ 
    printf("%d: 3.so\n", pid()); 
}  

はでそれを使用し

sudo perf probe -x /path/to/1.so func 
sudo perf probe -x /path/to/2.so func 
sudo perf probe -x /path/to/3.so func 
sudo perf top -e probe_1:func,probe_2:func,probe3:func 
関連する問題