Aqu*_*irl 30 debugging gdb breakpoints
硬件和软件断点之间有什么区别?
硬件断点是否比软件断点更快,如果是,那么如何,以及为什么我们需要软件断点呢?
小智 12
硬件断点实际上是比较器,将当前PC与比较器中的地址进行比较(启用时).设置断点时,硬件断点是最佳解决方案.通常通过调试探针设置(使用JTAG,SWD,...).硬件断点的缺点:它们是有限的.CPU只有有限数量的硬件断点(比较器).可用硬件断点的数量取决于CPU.ARM 7/9内核有2个现代ARM设备(Cortex-M 0,3,4),介于2和6之间,x86通常为4.
软件断点实际上是通过用断点指令替换要断点的指令来设置的.断点指令存在于大多数CPU中,通常与最短指令一样短,因此x86上只有一个字节(0xcc,INT 3).在Cortex-M CPU上,指令是2或4个字节,因此断点指令是2字节指令.
如果程序位于RAM中(例如在PC上),则可以轻松设置软件断点.许多嵌入式系统都将程序放在闪存中.这里交换指令并不容易,因为闪存需要重新编程,因此主要使用硬件断点.如果程序位于闪存中,则大多数调试探针仅支持硬件断点.但是,有些(例如SEGGER的J-Link)允许使用断点指令重新编程闪存,并且即使在调试位于闪存中的程序时也允许无限数量的(软件)断点.
除上述答案外,还必须注意,尽管软件断点会覆盖程序中的特定指令以知道在哪里停止,但实际上数量有限的硬件断点实际上是处理器的一部分。
贾斯汀·塞茨(Justin Seitz)在他的《灰色帽子Python》一书中指出,此处的重要区别在于,通过覆盖指令,软件断点实际上会更改文件的CRC,因此,诸如恶意软件之类的任何程序都可以更改其CRC。行为是对设置断点的响应,而对于硬件断点,调试器正在停止并逐步执行某些代码块则不太明显。
归档时间: |
|
查看次数: |
36914 次 |
最近记录: |