x86デバッグレジスタ


X86_debug_register
上のx86アーキテクチャ、デバッグレジスタは、プロセッサによって使用されるレジスタであるプログラム のデバッグ。DR0 … DR7という名前の6つのデバッグレジスタがあり、DR4とDR5はDR6とDR7の廃止された同義語です。デバッグレジスタを使用すると、プログラマは4つのデバッグアドレスのセットに関連付けられたさまざまなデバッグ条件を選択的に有効にできます。これらのレジスタのうち2つは、デバッグ機能を制御するために使用されます。これらのレジスタは、MOV命令のバリアントによってアクセスされます。デバッグレジスタは、ソースオペランドまたはデスティネーションオペランドのいずれかです。デバッグレジスタは特権リソースです。それらにアクセスするMOV命令は、特権レベルでのみ実行できます。零。他の特権レベルで実行しているときにデバッグレジスタの読み取りまたは書き込みを試みると、一般保護違反が発生します。

コンテンツ
1 DR0からDR3
2 DR7-デバッグ制御
3 DR6-デバッグステータス
4 も参照してください
5 参考文献
6 外部リンク

DR0からDR3
これらの各レジスタには、4つのブレークポイント条件の1つに関連付けられた線形アドレスが含まれています。各ブレークポイント条件は、DR7のビットによってさらに定義されます。
デバッグアドレスレジスタは、ページングが有効かどうかに関係なく有効です。これらのレジスタのアドレスは線形アドレスです。ページングが有効になっている場合、線形アドレスはプロセッサのページングメカニズムによって物理アドレスに変換されます。ページングが有効になっていない場合、これらの線形アドレスは物理アドレスと同じです。
ページングが有効になっている場合、タスクごとに線形アドレスから物理アドレスへのマッピングが異なる場合があることに注意してこの場合、デバッグアドレスレジスタのアドレスは、あるタスクには関連しているが、別のタスクには関連していない可能性がこのため、x86にはDR7にグローバルとローカルの両方のイネーブルビットがこれらのビットは、特定のデバッグアドレスにグローバル(すべてのタスク)またはローカル(現在のタスクのみ)の関連性があるかどうかを示します。

DR7-デバッグ制御
DR7の下位8ビット(0、2、4、6および1、3、5、7)は、4つのアドレスブレークポイント条件を選択的に有効にします。有効化には、ローカル(0,2,4,6)レベルとグローバル(1,3,5,7)レベルの2つのレベルがローカルイネーブルビットは、新しいタスクでの不要なブレークポイント状態を回避するために、すべてのタスクスイッチでプロセッサによって自動的にリセットされます。グローバルイネーブルビットは、タスクスイッチによってリセットされません。したがって、これらはすべてのタスクに対してグローバルな条件に使用できます。
ビット16〜17(DR0に対応)、20〜21(DR1)、24〜25(DR2)、28〜29(DR3)は、ブレークポイントがトリガーされるタイミングを定義します。各ブレークポイントには、実行時(00b)、データ書き込み(01b)、データ読み取りまたは書き込み(11b)のいずれでブレークするかを指定する2ビットのエントリが10bは、IOの読み取りまたは書き込みの中断を意味するように定義されていますが、ハードウェアはそれをサポートしビット18-19(DR0)、22-23(DR1)、26-27(DR2)、30-31(DR3)は、ブレークポイントによって監視されるメモリ領域の大きさを定義します。この場合も、各ブレークポイントには、1(00b)、2(01b)、8(10b)、または4(11b)バイトのいずれを監視するかを指定する2ビットのエントリが

DR6-デバッグステータス
デバッグステータスレジスタを使用すると、デバッガはどのデバッグ条件が発生したかを判断できます。プロセッサは、有効なデバッグ例外を検出すると、デバッグ例外ハンドラに入る前に、このレジスタの下位ビット(0、1、2、3)を設定します。
DR6のビットがプロセッサによってクリアされることは決してないことに注意して次のデバッグ例外を識別する際の混乱を避けるために、デバッグハンドラは戻る直前にゼロをDR6に移動する必要が

も参照してください
制御レジスタ
テストレジスタ

参考文献
^ http://www.sandpile.org/x86/drx.htm ^ GNU GDB 6.5 gdb / i386-nat.c
Intel80386プログラマーズリファレンス

外部リンク
http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspxWindowsのデバッグレジスタを使用します。