問題タブ [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.
c++ - PIN を使用して Symbol アドレスを取得する
記号の PIN サポートをテストしています。次のコードがあります。
}
基本的に、実行可能ファイルのロードされたすべてのイメージと、それぞれのすべてのシンボルを解析しています。シンボルごとに、画像の名前、アドレス、名前、および値を出力します。
私の目的は、ここでコードの後半部分を使用して、名前から始まるシンボルのアドレスを取得することです。
ただし、プログラムは情報を正しく出力しません。シンボルの名前は(null)で、値とアドレスは 0 に設定されます。イメージの名前は正しく表示されます。私は何を間違っていますか?
profiling - ピンツールを使用したメモリアクセストレース
インテルのピン ツールの使用中に問題が発生しました。C++ プログラムのメモリ アクセス トレースが必要で、そのために使用しています。まず、C++ プログラム (./a.out) を実行します。
今、c ++で、各変数のアドレスも出力しました。ピンによって生成されたファイル内のすべてのアドレスを、ファイルによって出力された実際の変数名に置き換えると、間違った順序になります。
たとえば、変数 'a' と 'b' が加算され、結果が 'c' に格納され、コンソールに出力される合計プログラム (わずか 5 行のコード) の場合、ピン 'b' によって生成されたファイルには 150 回存在します。 'a' は 33 回存在し、'c' は 3 回存在します。ただし、コードでは、すべての変数が 2 回以上参照されません。実際のメモリ アクセス トレースを取得するにはどうすればよいですか。誰でも私を助けてください。本当に感謝します。
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
それらの違いは何ですか?それを達成するための最良の方法は何ですか?
c++ - Python を使用した PIN にはツールが含まれています。あいまいな記号
この投稿と同じ問題があります。
基本的に、を使用する PIN ツールをコンパイルしようとしていますPython.h
。
Windows.h
同じと呼ばれるいくつかのタイプがありPIN.h
、それらのいずれかがそれらの名前空間を宣言しているので、error C2872: 'UINT32' : ambiguous symbol
問題は、私のPINツールがPIN.h
and Python.h
(同時にインポートするWindows.h
)をインポートし、両方が同じ名前のタイプを持っていることですそのため、コンパイラはそれぞれがどのタイプであるかを認識せず、あいまいなシンボルエラーが発生します
私は解決策を使うことができません:
また
名前を変更する必要があるそれらへの参照が多すぎて混乱するためです (PIN および Windows.h ライブラリはUINT32
何CONTEXT
度も使用します)。
これを修正するエレガントな方法はありますか?
c++ - スレッド間の共有メモリ
Intel ツールPin
を使用してマルチスレッド プロセスを計測し、Linux 上のスレッド間の共有メモリ アクセスを監視しますPin
。共有メモリ アドレスを記録するツールを開発します。Pin の計測コードは次のとおりです。
この関数はRecordMemRead
、RecordMemWrite
メモリの読み取りまたは書き込み時にスレッドの情報とメモリアドレスを記録するために使用され、この関数でロックを使用しています。
グローバル変数やヒープメモリなど、スレッド間で共有するメモリアドレスを記録したい。
しかし、単純なマルチスレッド プログラムを使用してツールをテストすると、. テストは以下の通り。このプログラムでは、ユーザーは共有変数または共有メモリを定義していません。
結果はマルチスレッドでアクセスしたメモリを示し、次の行にメモリアクセス命令のデバッグ情報を出力します。
結果は、2 つのスレッドの両方によるメモリ アクセスがあり、読み取り/書き込み命令にデバッグ情報がないことを示しています (コンパイルで -g オプションを追加しました)。したがって、これらのメモリはライブラリ
Q1によってアクセスされる可能性があります。メモリー?
Q2: ライブラリで定義されていない、ユーザーによって定義されたメモリを監視したいだけの場合、それらを区別する方法を教えてください。
linux - Pin で一部のコールバック関数を呼び出せないのはなぜですか?
Intel-Pin を使用して Linux でインストルメントpthread_mutex_lock
化します。pthread_mutex_unlock
この 2 つのロック関数の呼び出しの前後にそれぞれ関数を挿入するので、ツールはロック関数の前後に文字列を出力することを期待しています。
楽器コードは以下の通り
このツールをコンパイルします
このツールを使用して簡単なテストを計測します
このテストをコンパイルします
最後に、my ツールを使用してこのテストを計測します
結果は
pthread_mutex_unlock の後に関数を挿入しましたが、この関数が呼び出されていないPthread_mutex_unlock_callAfter
のはなぜですか?
PS:Pin APIはそれを言う