ARM Watch Point 寄存器

Watch Point (WP) 有 6 个寄存器:

  • Address Value / Mask Register
  • Data Value / Mask Register
  • Control Value / Mask Register

其中,WP Address Value / Mask 是监控地址总线,WP Data Value / Mask 是监控数据总线。

断点用来标识某个地址上的一条指令,而观察点用来观察某个地址上的数据变化。

利用 WP 寄存器,可以实现硬件断点、软件断点以及观察点。比如:

1. 设置硬件断点

WP Control Value 寄存器的 nPOC 位置 0,表示取指令
在一个地址(比如 0x1234)设置一个断点:
* WP Address Value = 0x1234; WP Address Mask = 0x0
* WP Data Mask = 0xFFFFFFFF, 忽略 data

这样,当运行到地址 0x1234 处的代码时,进入调试状态。

这是一种非侵入型硬件实现的断点,调试器不需要干预。

2. 设置软件断点

WP Control Value 寄存器的 nPOC 位置 0表示取指令
WP Data Value = 0xDEDEDEDE, WP Data Mask = 0x00000000
WP Address Mask = 0xFFFFFFFF忽略 address

调试器的操作步骤:

  • 在需要设置断点的地方,将其代码内容备份,并替换为 0xDEDEDEDE。这样,当执行到这个位置时,进入调试状态;
  • 调试过这个位置以后,将该处内容恢复,并恢复程序运行;

3. 设置观察点

WP Control Value 寄存器的 nPOC 位置 0,表示数据访问
nRW = 0 (读) 1 (读写)
WP Address Value = 0x1234,WP Address Mask = 0x00000000
WP Data Mask = 0xFFFFFFFF

这样,对地址 0x1234 的数据进行读写时,进入调试状态。

参考资料

Read More: