软件调试笔记6 - 断点和单步执行: 硬件断点
重点介绍下读写域的使用方式。
硬件断点的设置方法:
用户态的调试器如何设置硬件断点呢?答案是通过线程的上下文context数据来间接访问调试寄存器。CONTEXT结构用来保存线程的执行状态,在多任务系统中,操作系统通过让多个任务轮换运行来使多个程序同时运行。当一个线程被挂起,包括通用寄存器在内的线程上下文信息会被保存起来,当该线程恢复执行时,保存的内容又会被恢复到寄存器中。用户态调试器可以用SetThreadContext API来设置调试寄存器的函数调用过程。
硬件断点的优缺点:
优点是不需要向代码中插入软件指令,缺点是数量限制,只有4个断点地址寄存器,另外是与CPU相关的,针对一个CPU的断点不一定适合其他的CPU。