デバッガー (olly、IDA、gdb などの一般的な x86 ring3 デバッガー) がソフトウェア ブレークポイントを仮想アドレス 0x1234 に設定するとします。
これは、0x1234 の任意のオペコードを「0xCC」に置き換えることで実現されます。ここで、デバッグ対象プロセスがこの 0xCC 命令を実行し、ソフトウェア例外を発生させ、デバッガーがこれをキャッチすると仮定しましょう。
デバッガーはメモリの内容を検査し、登録し、いくつかのことを行います..そして今、デバッグ対象プロセスを再開したいと考えています。
これは私の知る限りです。今から、それは私の仮定です。
デバッガーは、実行を再開するために、debugee の元のオペコード (0xCC に置き換えられた) を回復します。
デバッガーは、デバッグ対象の CONTEXT の EIP を操作して、回復された命令をポイントします。
デバッガーが例外を処理し、debugee がブレークポイントから再開します。
しかし、デバッガーはブレークポイントを維持したいと考えています。デバッガーはこれをどのように管理できますか?