4

Pin には、ルーチン、命令、イメージ、トレースの 4 つのレベルの粒度があります。計装コードの挿入を開始および停止する制限/領域を指定できますか? ( # start instrumentation , # end instrumentation ) のようなディレクティブまたはそのようなものによって、

例:
for( int i=0; i< x; i++) { #startInstrumentation for( ....;.....;.....) { // some code // function call, conditions , loops, .... } #endInstrumentation }
これを行う方法はありますか?

4

2 に答える 2

5

トレースベースのインストルメンテーションを使用して、必要なことを行うことができます。各トレースの開始時に、その開始アドレスを確認し、対象範囲内にない場合は、分析関数の追加を避け、ルーチンからすぐに戻ります。

トレースが関心領域の外で開始され、その領域内で終了する、またはその逆になる可能性があります。これが発生する可能性がある場合は、何を計測するかについて、よりきめ細かい選択を行う必要があります。労力を費やす前に、これが本当に懸念事項であるかどうかを確認します。

特定のルーチンまたはイメージの計測に関心がある場合は、キットの InstLib の filter.cpp の使用を検討してください。使用例は InstLibExamples にあります。

これらの関心領域をターゲットにする方法については、いくつかのオプションがあります。ターゲット バイナリを制御できない場合は、対象のイメージへのオフセットのペアとして、コマンド ライン パラメーターで領域を指定できます。

バイナリを制御できる場合は、関心のある領域の開始と終了を指定する 2 つのシンボルを挿入し、SYM インターフェイスを使用してイメージ シンボルを反復処理できます。

于 2015-08-15T21:32:22.550 に答える