Kal*_*cic 3 c++ debugging breakpoints x86-64 machine-code
我正在编写一个调试器,并且当多个线程同时击中它们时,当前正试图使断点可靠地工作.据我所知,大多数调试器通过用0xCC替换指令的第一个字节来实现断点,这也是我目前正在做的事情.但是,我没有看到任何恢复原始字节的方法,同时仍然能够阻止其他即将命中该断点的线程,而不会停止所有正在运行的线程.有没有人知道通常如何实现?暂停所有线程真的是唯一的解决方案吗?
在所有线程停止的情况下,恢复该字节,仅针对一条指令执行一个线程,重新创建断点,然后继续执行所有线程.如果您使用的是有限的硬件调试寄存器之一,则可以使用RF暂时忽略一条指令的断点(参见下文).
在调试期间仅停止一个线程,而其他线程继续运行,只是在寻找麻烦.考虑一下在第一次停止时如何处理相同或不同的断点?或者如果发生异常?
在Intel CPU上,有一个可以在EFLAGS寄存器中设置的标志(恢复标志,位16).设置时,这将允许执行第一条指令而不触发断点,并且在使用硬件断点(而不是断点指令)时将起作用.
第3卷(系统编程指南,可从英特尔下载)中的第17章包含有关Intel IA-32 CPU的调试功能的大量详细信息.
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |