了解了一下调试相关的内容,x86下的p6平台,大约支持的几种基本断点方式:
1,断点指令
2,向特定地址写数据
3,向特定地址读数据
4,操作特定IO地址(读写)
对于断点指令:int 3(0xcc),当cpu执行到该指令时,会检查中断向量表,转为去执行中断服务“函数”
对于想特定指令写数据,同样也会检查中断向量表(实际上很可能不是中断向量表,因为引发的是一个寄存器检查,检查异常处理函数的地址),执行对应的代码块。
对于3,4与2的方式一样。
在VS里面,对于监控某个变量是否被修改成某个固定的值,很有可能是采用了上述的2或3这两个机制。当然,我这边的vs的反汇编代码其实只是指令上的判断而已,当修改成了我指定的条件时,最终会引发DebugBreak这个函数(这个函数最终还是执行int 3(0xcc))
在VS里面还有没有发现那一种中断方式是对应着4的。