2013-03-05 57 views

回答

2

断点由“BA”命令设置被称作处理器或硬件断点。

首先是好消息

这是很容易设置硬件断点。您需要将处理器的调试寄存器(DR0,DR1,DR2或DR3)之一设置为数据的地址,并将调试控制寄存器DR7设置为字段以设置存储器的大小和访问类型。 (在64位汇编)指令是这样的:

MOV RAX,DR0

显然,你必须以某种方式从你选择的语言执行此汇编指令,或互操作使用C++和内联汇编,但这是比设置软件断点更容易。

现在的坏消息

首先,在SMP机器上,你将不得不为可以触摸你的代码中所有的处理器做到这一点。如果您为进程配置处理器亲和性,或者在单处理器上进行调试,这可能是可以解决的。其次,英特尔架构上只有4个调试处理器。如果您尝试使用WinDbg设置处理器断点,则在第4步之后,如果您点击g,它将会投诉Too many data breakpoints for thread N

我认为你所提到的关于自动化的全部目的是因为有太多的对象来手工设置断点。无论如何,由于你只限于4个ba断点,所以自动化这一点并没有多大意义。

相关问题