ripの値は揮発性であり信用できない
とのことですが、これはちょっと 表現が適切ではない 気がします。
確かに ripレジスタ はリアルタイムに値が変更される(=揮発性)レジスタではありますが、Memory.dmp(=TrapFrame)に記録されるのは STOP エラーが発生したり割り込みが発生した後、おそらく実際にレジスタの値を記録した時点 の値を 忠実に記録 したものであって、割り込みが発生する前 に人為的に書き換えた値が保存されている訳ではありません。
ripレジスタ の場合、エラーの ① 原因となった箇所 と、例外発生により ② 割り込みが掛かった時点 と、実際にレジスタの値を ③ 記録した時点 では、値が刻一刻と変化して行くのは当たり前のことなので、①と③を取り違えないよう忠告するメッセージが表示されているだけです。
実際にデバッグする際は、Memory.dmp(=TrapFrame)から エラー発生箇所の当たりを付けて、デバッガー により原因を探る訳ですが、デバッガーで ステップ動作やブレークポイントの設定 を行った場合に表示される ripレジスタの値 は、文字通り 確認したい箇所におけるレジスタの値 に他なりません(=つまり信頼できる値です)。
また、ページフォールトをハンドルするルーチン nt!KiPageFault で 揮発的(Volatile)なレジスタと rbp がスタックに保存されている ということは、割り込みが掛かった時点(上記②)のレジスタの値を保存しておくことで、その内容をも確認できることを意味しています。
エラー発生時に、原因調査のために一般的に良く利用されている スタックトレース は、このように スタックに保存されている「呼び出し元」の情報 を辿ることで表示が可能になっています。
ですから、実行レジスタの処理を確認する際 には、これまで通りデバッガーが示すレジスタの値をそのまま確認すれば良いだけです。
デバッグに際して Memory.dmp(=TrapFrame)をどのように活用すれば良いかについては、例えば下記ページなどが参考になると思います。(ripレジスタの値をそのまま利用している訳ではないです。)
Windows のクラッシュダンプを解析する(Windows SDK for Windows 8)
別環境で採取した Core ファイルを解析する方法
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/03 11:12