-2

私は、300 の異なる命令によって毎秒 1000x に書き込まれるアドレスを持っています。c++ を使用して、アドレスに書き込む最後の命令を見つけるにはどうすればよいですか?

特定の値がアドレスに書き込まれるとインスタンスに警告するように既に作成しましたが、その特定の値を書き込んだ最後の命令アドレスを出力するにはどうすればよいですか?

私はデバッガでこれを行いますが、私が見つけたすべてのデバッガは、プログラムをフリーズせずに毎秒 1000 回変化するアドレスで条件付きブレークポイントを処理できません。

C++ でこれを行うことができない場合、他にどのような方法でこれを行うことができますか? 異なるアドレスから毎秒 1000 回以上の書き込みを受け取るメモリ アドレスに特定の値を書き込むアドレス命令を見つける必要があります。

アップデート:

不思議に思っている人のために、私は Windows 7 x32 を使用しています。

4

2 に答える 2

1

pinを見てください。簡単に言うと、pin を使用すると、x86 命令レベルでコードをインストルメント化し、読み取りや書き込みを自由に追跡できます。私はキャッシュのパフォーマンスをモデル化するために自分で使用しましたが、かなり高速であることがわかりました。

于 2013-03-19T01:04:43.790 に答える
0

すでに作成しているので、特定の値がアドレスに書き込まれたことをインスタンスに警告しますが、その特定の値を書き込んだ最後の命令アドレスを出力するにはどうすればよいですか?

1 回限りのデバッグの場合は、system/popen pstack( http://www.linuxcommand.org/man_pages/pstack1.html ) または同様のコード (コール スタックをダンプする外部プログラム) を警告するコードを用意します。正確にどのプログラムを使用するかは、OS に大きく依存しており、環境については何も言っていません。(これは、無効なメモリ アクセスなどの後にシグナル ハンドラからコール スタックを生成するための一般的な手法です。)

于 2013-03-19T01:34:03.147 に答える