Intel Pin の使い方
Dynamic Binary Instrumentation (DBI) は実行時にバイナリに命令を挿入することによって, プログラムの実行トレースから情報を取り出す技術であり, それを用いたツールの一つである Intel Pin を使っていく. 以下で簡単に使っていく手順をメモしていく.
公式のUser Guide もある. User Guid
1. インストール
OSにあったものを, url からダウンロードし, 以下のコマンドで解凍する.
$ tar zxf pin-3.7-97619-g0d0c92f4f-gcc-linux.tar.gz
解凍したフォルダにサンプルが入っているので, それを移管コマンドでコンパイルする.
$ cd pin-3.7-97619-g0d0c92f4f-gcc-linux/source/tools/SimpleExamples $ make all TARGET=intel64
コンパイルが終わると, obj_intel64
フォルダのしたに, サンプル例を実際の動かすための共有ライブラリ(.so) が出来上がる.
2. 実行方法
pin の実行方法は Usage: pin [OPTION] [-t <tool> [<toolargs>]] -- <command line>
である.
例えば, 実行した命令数をカウントしたい場合以下のようにすれば良い. 下の例では, /bin/ls
を実行したときの命令数をカウントしている.
$ ../../../pin -t obj-intel64/inscount0.so -- /bin/ls buffer_linux.cpp follow_child_app2.cpp inscount_tls.cpp nonstatica.cpp stack-debugger.cpp buffer_windows.cpp follow_child_tool.cpp invocation.cpp obj-intel64 statica.cpp countreps.cpp fork_app.cpp isampling.cpp pinatrace.cpp staticcount.cpp detach.cpp fork_jit_tool.cpp itrace.cpp proccount.cpp strace.cpp divide_by_zero_unix.c imageload.cpp little_malloc.c replacesigprobed.cpp w_malloctrace.cpp divide_by_zero_win.c inscount.out makefile safecopy.cpp emudiv.cpp inscount0.cpp makefile.rules stack-debugger-tutorial.sln fibonacci.cpp inscount1.cpp malloc_mt.cpp stack-debugger-tutorial.vcxproj follow_child_app1.cpp inscount2.cpp malloctrace.cpp stack-debugger-tutorial.vcxproj.filters
実際の結果は, inscount.out
に吐き出されているので, 確認してみる実行命令数が以下のように記載されている.
$ cat inscount.out
Count 729204
参考文献
- [intel Pinを使ってみる]