2017-08-23 17 views
1

Linux/BSDでCコードを分析して、使用されているライブラリ関数の頻度を確認したいと考えています。だから基本的に私はコードをコンパイルしたいと思いますし、コンパイルのステップの後に何らかの形でこのコードが使うすべての関数を出力します。例えば、 "chown、mmap、etc、etc"とします。私はこれを数千のオープンソースアプリケーション上で実行して、自動化を探しています。コンパイル時にすべてのlibc呼び出しを特定する方法は?

これを行う方法はありますか?

注。 straceやptraceのような動的計測は私がすべてのアプリケーションを動かすことができず、たとえ私がすべての単一のコードパスを通らないかもしれないので、可能ないくつかの呼び出しを逃してしまうかもしれません(つまり、条件)

+0

私は 'strace'を調べ始めます。 –

+0

この情報は、リンク処理中に取得することができます。 'ld'オプションをチェックしますか?ありがとう。 – neuhaus

+0

ありがとう。この場合、straceが動作しない理由を書き加えました。 – nightshade99

答えて

1

コンパイルされたバイナリでobjdump -T | grep GLIBCを実行してみてください。例えば

$ objdump -T /bin/lessecho|grep GLIBC 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.2.5 putchar 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.2.5 puts 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.4 __stack_chk_fail 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.2.5 strchr 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.2.5 __libc_start_main 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.2.5 strcmp 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.3.4 __printf_chk 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.2.5 exit 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.2.5 fwrite 
0000000000000000  DF *UND* 0000000000000000 GLIBC_2.3.4 __fprintf_chk 
0000000000000000 w DF *UND* 0000000000000000 GLIBC_2.2.5 __cxa_finalize 
0000000000202040 g DO .bss 0000000000000008 GLIBC_2.2.5 stderr 

またnm -Dは、同様のデータが表示されます。

+0

私のプラットフォームではobjdumpがうまく動作しませんでしたが、nm -Dはいくつかの情報を与えるようです。ヒントありがとう! – nightshade99

関連する問題