問題タブ [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.
memory - Intel の PinTool を使用してスタック ポインターの内容を取得する
objdump ユーティリティを使用すると、変数の相対アドレスを取得できます。たとえば、単純な C プログラムを考えてみましょう。
gcc でコンパイル:
$ gcc -g example.c -o example
ELF 情報については、dwarf フラグを指定して objdump ユーティリティを実行します。
$objdump --dwarf=info の例
出力:
私は次のようにしたい: -
- my_local などの変数のアドレスを取得したい。最初に DW_TAG_Variable、次に DW_AT_name、上から関数 -20 でベース レジスタによって指定された DW_AT_location を調べます。
質問: 実行時にベース レジスタの内容を知るにはどうすればよいですか。PinTool を使用して実装できますか。
より広い意味での質問: dwarf と Pintool からの情報が与えられたメモリ内のアドレスへの変数 my_local マップが必要です。
前もって感謝します。
c++ - '__value' シンボルによる PIN 3.0 コンパイル エラー
現在、Windows 10 を使用しているため、Visual C++ 2012 を使用してツールを PIN 3.0 に移植しています。ここで提供されている移植ガイドに従いました。
ただし、エラーが発生しました:
この /clr:oldSyntax オプションをオンにして、RTTI の可用性 (/GR- の代わりに /GR) を追加すると、/clr:oldSyntax と互換性がないため、多かれ少なかれ同じ問題が発生します。
このエラーはファイル type_trait.h (PIN 3.0 ライブラリのヘッダー ファイル) にあります。
これは一般的な問題ですか? その場合、回避策はありますか? または、移植ガイドで何かを見逃していましたか? この PIN 3.0 ヘッダーで導入された __value という名前が矛盾していることを理解しています。
docker - ドッカーなしのドッカー
ドッカー自体なしで、いくつかのドッカーコンテナを実行しようとしています!!!
多分あなたは知っていCloudSuite Benchmarks
ます。Docker なしでMediaStreamingを実行しようとしています(実行可能ファイルを使用する intel pintool を介して実行する必要があるため、コンテナーではなく実行可能ファイルが必要です)。
私はそのexport
ような指示を使用しました:
docker export streaming_server > server.tar.gz
次に、tar ファイルを解凍しました。次のステップで何をすべきかわかりません。リンクでわかるように、物事はトリッキーになっています。私はそのようなことを実行する必要があります:
docker run -d --name streaming_server --volumes-from streaming_dataset --net streaming_network cloudsuite/media-streaming:server
それを行う方法はありますか?最初に試してみましたhello-wolrd
が、物事はより簡単でした。解凍後、実行可能ファイルしかありませんでした。今はそれを行う方法がわかりません。
前もって感謝します!
c++ - Intel Pin with C++14
質問
C++14 またはその他の C++ バージョンでの Intel Pin の使用に関していくつか質問があります。
- 古い C++ のコードを新しいバージョンでコンパイルする際に問題が発生することはめったにありませんが、Intel Pin は命令レベルを操作するため、C++11 または C++14 でコンパイルした場合に望ましくない副作用はありますか?
- C++11 または C++14 でコンパイルしても問題ない場合、自分のツールに対してのみ新しいバージョンの C++ を有効にするルールを作成するにはどうすればよいですか?
- 可能であれば、 GCC/G++ の既定の C++ バージョンを最新に設定するにはどうすればよいですか? また、そうする際に留意すべきことは何ですか?
状況
動的コール グラフ ピン ツールを作成しています。わかりやすくするために、コール スタックの深さを計算しています。安全のために、深さをインクリメントまたはデクリメントするコードの抜粋を でラップすることにしましたstd::mutex
。std::mutex
これにより、C++ 11 以降でのみ利用可能な問題が発生しました。これは、私のマシンの Intel Pin のデフォルトではありません。
コンパイル コマンド:
編集
バージョンを C++11 に定義するビルド ルールを作成できましたが、壊れてしまいました。make を介して g++ に送信されたコマンドは、
これはコンパイルされません。代わりに、STL ヘッダー内の巨大なエラー ログに分類されます。Pin には、C++11 および C++14 と競合する STL の独自のサブセットが付属しているようです。g++ 出力のペーストをアップロードしました。それは 2331 行を埋めましたが、アクセスするフォルダーに奇妙な点があることに気付きました。STL ライブラリは、次の2 つの異なるディレクトリから含まれています。
/usr/include/c++/5/
/home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/stlport/include/
エラーを 1 つずつ解決することは不可能です。ピン stl ポートを削除することは、おそらくさらに悪い考えです。Pin を新しい C++ で使用できる場合は、単純ではないと思いますstd=c++1y
。
c++ - Pin を使用した malloc トレースの行番号
私は、malloc/free 操作をトレースするための Pintool に取り組んでいます。ManualExamples/malloc_trace.cpp から、サンプル コードで malloc/free を出力できました。
malloc/free が発生したソース コードの行番号を出力する方法があるかどうか疑問に思っていました。次の malloc がインストルメント化されている malloctrace.cpp では、任意のパラメーターまたは別の呼び出しを追加して、行番号を出力できます。
DebugTrace.cpp には、関数があることがわかります
RTN の行番号を出力できます。この関数を使用して malloc の行番号を取得する方法はありますか?
// 編集済み
新しい関数を書きました
メイン関数を呼び出しています
これは「GetSourceLocation」関数を使用する正しい方法ですか、私はこれを試しましたが、うまくコンパイルされますが、行番号は出力されません。
ありがとう、K
valgrind - Valgrind の下の Intel ピン。ライブラリエラー?
valgrind で intel pin を実行すると、次のエラーが発生します。
私はvalgrind-3.10.1を持っています
と
私は得る
助言がありますか?
c++ - intel Pin のグローバル変数
ピンツールにこのグローバル変数があり、命令 (インストルメンテーション関数) 内でその内容を取得したいと考えています。
これどうやってするの?GLOBALVAR、LOCALVAR、const、および static を試しましたが、正しい値が返されませんでした。
intel-pin - Intel Pin 3.0 は MPX 命令を認識しませんか?
Intel Pin 3.0 バージョン 76887 の最新バージョンを使用しています。
MPX 対応のおもちゃの例があります。
gcc + MPX でコンパイルすると、逆アセンブリで MPX 命令が表示されobjdump
、例では境界違反が正しく書き込まれます。
ここで、Intel Pin を使用して特定の MPX 命令の総数を数えたいと思いBNDLDX
ますBNDMK
。
私の最初の試みは、付属のツールを使用することでしたsource/tools/SimpleExamples/trace.cpp
。このツールはNOPs
、MPX 命令の場所を示してくれました。
2 回目の試行では、次のスニペットを使用して独自のツールを作成しました。
これは機能しません。countBndmk は呼び出されません。コードを他の命令 iclasses で再確認したところ、それらは機能しました。明らかに、Pin (または XED?) が MPX 命令を認識しないという問題があります。
ドキュメントを閲覧していると、興味深いノブに気付きました
このノブは MPX デコードを有効に0
しているようで、デフォルトで有効になっています。コマンドラインまたはツールで有効にする方法がわかりません。コードまたはインターネットでこの問題に関する他の参照は見つかりませんでした。
インテル SDE を使用して、MPX 命令を含むデバッグ トレースをダンプできることはわかっています。Intel Pin で MPX を有効にする方法はあるのだろうか。それとも、オペコードを自分でデコードするしか解決策はありませんか?
instrumentation - パケット処理アプリケーションの Intel Pin を使用したメモリ参照トレース
Intel Pin の使用方法を学んでいますが、特定のユースケースのインストルメンテーション プロセスに関していくつか質問があります。単純なパケット処理アプリケーションのメモリ参照トレースを作成したいと考えています。そのために必要なピンツールを開発しました。私の質問は次のとおりです。
パケット処理アプリケーションへの入力として常に同じネットワーク パケット トレースを使用し、2 台の異なるマシンで同じアプリケーションを計測するとします。メモリ参照トレースはどのように異なりますか? どうやら Pin はユーザー空間を計測し、アーキテクチャに依存しないため、2 つの出力メモリ参照トレースに大きな質的な違いが見られるとは思えません。その仮定は正しいですか?
パケット処理アプリケーションにネットワーク パケットを注入する速度を実験すると、メモリ トレースはどのように変化しますか? または、まったく変更されますか? はいの場合、出力トレースの違いをどのように検出できますか?
ありがとうございました