ネットワークパケットのデータフロー/コードフローをたどることに関連する何かをしていると思いますが、おそらくデータ汚染に密接に関連していますか?
パケット処理アプリケーションへの入力として常に同じネットワーク パケット トレースを使用し、2 台の異なるマシンで同じアプリケーションを計測するとします。メモリ参照トレースはどのように異なりますか?
メモリ トレース トレースをまったく異なるものにする要因は複数あります。重要な点は、「2 つの異なるマシン」です。
同じ OS の正確なコピー : アドレスが変更されることを除いて (スタック、ヒープ、および仮想メモリ マネージャーが同じように動作するため) トレースはほぼ同じです (ASLR)。
同じ OS (システム共有ライブラリの同じバージョンである必要はありません): ターゲット アプリケーションの再コンパイルがない場合は、おそらく上記と同じです。異なる動作をする可能性があるヒープマネージャーによる小さな違いかもしれません。
異なる OS (トレースされたアプリケーションの再コンパイルが必要な場合): 完全に異なるトレース。
どうやら Pin はユーザー空間を計測し、アーキテクチャに依存しないため、2 つの出力メモリ参照トレースに大きな質的な違いが見られるとは思わないでしょう。その仮定は正しいですか?
Pintools は別のアーキテクチャ用に再コンパイルする必要がありますが、pintool 自体はターゲット アプリケーションのトレース方法を変更しないでください (同じピンツール + 同じ OS + 同じアプリケーション = ほぼ同じトレース)。
パケット処理アプリケーションにネットワーク パケットを注入する速度を実験すると、メモリ トレースはどのように変化しますか?
これはシステムに依存し、挿入ポイントにも依存します。recv()
またはでトレースを開始するとrecvfrom()
、たとえばレートが重要すぎる場合に、輻輳またはドロップされたパケット (UDP) が発生する可能性があります。プロトコル、受信ウィンドウなどによって異なります。ここには実際には複数の要因があります。
または、まったく変更されますか? はいの場合、出力トレースの違いをどのように検出できますか?
この場合、おそらくデータ フローではなくコード フローをチェックするでしょう (私には簡単に思えます)。まったく同じパケットでレートが異なる場合、コード ブランチが同じでない場合 (おそらく基本ブロック (BBL) レベルで)、同じパケットが異なる方法で処理されていることがすぐにわかります。