什么是硬件断点以及何时需要使用它?

逆向工程 断点
2021-06-23 18:28:49

在 lena151 RE 教程的第 5 部分中,我看到了硬件 BP。他的解释让我很难理解。

谁能解释一下什么是硬件断点以及我们何时需要使用它?

1个回答

简短的回答:

从用户的角度来看,软件断点只是为了指令,你可以设置多少就多少,而硬件断点是通用的,但是你只能同时使用其中的几个(通常是4个)。

TL,博士;

硬件断点由直接集成在 CPU 中的特殊逻辑电路实现,连接到

  • 一侧地址总线,以及
  • 另一个上的特殊调试寄存器

在此处输入图片说明

要设置硬件断点,请使用以下信息填充调试寄存器(通常由调试器间接):

  • (起始)地址
  • 长度(字节,字或双字),
  • 要监视访问模式(读、读/写或指令执行),
  • 局部/全局模式(不用于决定执行代码是否必须打破)。

您可能只针对少量地址执行此操作,这取决于硬件,常用数字为 2 到 6(例如,对于 x86,您可以设置 4 个硬件断点:地址被写入调试寄存器 DB0 到 DB3,而其他信息——适用于所有作为适当的位标志单独寻址 - 到DB7 寄存器)。

该电路监视对存储器(RAM 或 ROM)的每次访问,并将地址、长度和访问模式与调试寄存器中的值进行比较如果它们一致,则电路发送 Halt 信号并且调试器中断被调试程序的执行。


所以硬件断点(HB)和软件断点(SB)区别是:

  1. 他们数量

    • 您可以根据需要设置任意数量的 SB,但是
    • 只有非常少的 HB(通常为 4 个)。
  2. 可用性方面

    • SB 被设置为特定指令(没有办法为内存访问设置它们),而
    • HB 设置为地址范围和所需的访问模式。
  3. 在适用的内存类型中

    • SB写入内存(被INT 3观察指令的第一个字节所在的指令),所以它不能为只读存储器(ROM)中的指令设置断点,
    • HB 不向内存写入任何内容,因此它没有这样的限制。
  4. 速度上(硬件总是比软件快,所以HB比SB快)。

例如,如果您知道内存中某个字符串的地址,并且您对何时读取它感兴趣,SB 不会帮助您,但 HW 会帮助您。


一些参考: