問題タブ [intel-pin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
239 参照

c++ - PIN を使用して Symbol アドレスを取得する

記号の PIN サポートをテストしています。次のコードがあります。

}

基本的に、実行可能ファイルのロードされたすべてのイメージと、それぞれのすべてのシンボルを解析しています。シンボルごとに、画像の名前、アドレス、名前、および値を出力します。
私の目的は、ここでコードの後半部分を使用して、名前から始まるシンボルのアドレスを取得することです。
ただし、プログラムは情報を正しく出力しません。シンボルの名前は(null)で、値とアドレスは 0 に設定されます。イメージの名前は正しく表示されます。私は何を間違っていますか?

0 投票する
1 に答える
2037 参照

profiling - ピンツールを使用したメモリアクセストレース

インテルのピン ツールの使用中に問題が発生しました。C++ プログラムのメモリ アクセス トレースが必要で、そのために使用しています。まず、C++ プログラム (./a.out) を実行します。

今、c ++で、各変数のアドレスも出力しました。ピンによって生成されたファイル内のすべてのアドレスを、ファイルによって出力された実際の変数名に置き換えると、間違った順序になります。

たとえば、変数 'a' と 'b' が加算され、結果が 'c' に格納され、コンソールに出力される合計プログラム (わずか 5 行のコード) の場合、ピン 'b' によって生成されたファイルには 150 回存在します。 'a' は 33 回存在し、'c' は 3 回存在します。ただし、コードでは、すべての変数が 2 回以上参照されません。実際のメモリ アクセス トレースを取得するにはどうすればよいですか。誰でも私を助けてください。本当に感謝します。

0 投票する
1 に答える
1145 参照

intel-pin - ピンツールで配列のメモリ有効アドレスを取得するにはどうすればよいですか?

配列のメモリ位置(実効アドレス)を印刷しようとしましたが、次のことがわかりました:

1- 最初の方法: (例として読み取り操作の場合)
IARG_MEMORYREAD_EA
を分析関数の引数として使用し、この関数内でこの値を出力します (メモリ読み取りの実効アドレス。INS_IsMemoryRead が true で IPOINT_BEFORE の場合にのみ有効です)。

2- 2 番目の方法: 挿入コールバックによる:

INS_OperandMemoryDisplacement(INS ins,UINT32 n)
INS_OperandMemoryBaseReg(INS ins,UINT32 n)
INS_OperandMemoryIndexReg(INS ins,UINT32 n)
INS_OperandMemoryScale(INS ins,UINT32 n)

メモリ内のアドレス指定に使用される変位、ベース レジスタ、インデックス レジスタ、およびスケール値を返します。オペランドを指定し、次の式で実効アドレスを計算します。

実効アドレス = Displacement + BaseReg + IndexReg * Scale

それらの違いは何ですか?それを達成するための最良の方法は何ですか?

0 投票する
0 に答える
182 参照

c++ - Python を使用した PIN にはツールが含まれています。あいまいな記号

この投稿と同じ問題があります。

基本的に、を使用する PIN ツールをコンパイルしようとしていますPython.h

Windows.h同じと呼ばれるいくつかのタイプがありPIN.h、それらのいずれかがそれらの名前空間を宣言しているので、error C2872: 'UINT32' : ambiguous symbol 問題は、私のPINツールがPIN.hand Python.h(同時にインポートするWindows.h)をインポートし、両方が同じ名前のタイプを持っていることですそのため、コンパイラはそれぞれがどのタイプであるかを認識せず、あいまいなシンボルエラーが発生します

私は解決策を使うことができません:

また

名前を変更する必要があるそれらへの参照が多すぎて混乱するためです (PIN および Windows.h ライブラリはUINT32CONTEXT度も使用します)。

これを修正するエレガントな方法はありますか?

0 投票する
1 に答える
1422 参照

c++ - スレッド間の共有メモリ

Intel ツールPinを使用してマルチスレッド プロセスを計測し、Linux 上のスレッド間の共有メモリ アクセスを監視しますPin。共有メモリ アドレスを記録するツールを開発します。Pin の計測コードは次のとおりです。

この関数はRecordMemReadRecordMemWriteメモリの読み取りまたは書き込み時にスレッドの情報とメモリアドレスを記録するために使用され、この関数でロックを使用しています。
グローバル変数やヒープメモリなど、スレッド間で共有するメモリアドレスを記録したい。
しかし、単純なマルチスレッド プログラムを使用してツールをテストすると、. テストは以下の通り。このプログラムでは、ユーザーは共有変数または共有メモリを定義していません。

結果はマルチスレッドでアクセスしたメモリを示し、次の行にメモリアクセス命令のデバッグ情報を出力します。

結果は、2 つのスレッドの両方によるメモリ アクセスがあり、読み取り/書き込み命令にデバッグ情報がないことを示しています (コンパイルで -g オプションを追加しました)。したがって、これらのメモリはライブラリ
Q1によってアクセスされる可能性があります。メモリー?
Q2: ライブラリで定義されていない、ユーザーによって定義されたメモリを監視したいだけの場合、それらを区別する方法を教えてください。

0 投票する
1 に答える
840 参照

linux - Pin で一部のコールバック関数を呼び出せないのはなぜですか?

Intel-Pin を使用して Linux でインストルメントpthread_mutex_lock化します。pthread_mutex_unlockこの 2 つのロック関数の呼び出しの前後にそれぞれ関数を挿入するので、ツールはロック関数の前後に文字列を出力することを期待しています。
楽器コードは以下の通り

このツールをコンパイルします

このツールを使用して簡単なテストを計測します

このテストをコンパイルします

最後に、my ツールを使用してこのテストを計測します

結果は

pthread_mutex_unlock の後に関数を挿入しましたが、この関数が呼び出されていないPthread_mutex_unlock_callAfterのはなぜですか?
PS:Pin APIはそれを言う