INT 3 中断调试处理流程
Windows内核分析索引目录 :https://www.cnblogs.com/onetrainee/p/11675224.html INT 3 中断调试处理流程 一、调试器如何下INT 3 断点 1)首先,调试器使用 ReadProcessMemory,读取断点内存地址的字节。 2)之后,调试器再使用 WriteProcessMemory,将指定的内存地址指令写为0xCC。 3)之后,当程序执行到这里,遇到CC指令,会从IDT表中查03号段描述符,其会定向到Trap03函数。 4)经过一系列操作(下面会介绍),此时调试器就会接收到INT 3中断,程序暂停,用户可以用来进行一些处理。 5)恢复时,将1)读取的字节再重新写入到CC处,这样就可以保证程序的正常执行。 二、INT 3 异常指令如何派发到调试器 我们在 一、3) 中,其会经过 Trap03,因此INT3异常信息肯定是在这里发送的。 我们前面学过异常等派发,其检测到存在三环调试器时会发送到三环调试器,因此其派发也就是在这时进行的。 派发流程大体如下: 三、上面产生的两个疑问: 1)在 _kiDispatchException 中存在 dec eip,为什么调试器还需要修复 eip 注意:这个是Context.eip--,而三环与零环走的是 TrapFrame 结构