【发布时间】:2017-03-29 11:24:55
【问题描述】:
breakpoint read/write 是如何实现的?请注意,这与breakpoint execute 不同。
这个想法是从一个数据存储器地址开始,然后找到从该地址读/写的汇编指令。理论上,我们必须检查寄存器和正在执行的下一条指令(考虑位移偏移)才能确定这是否正确。假设当前指令是“存储字”:stw r0, 4 (r31),所以它写入地址r31 + 4。我们可以通过读取r31中的值,添加4并检查这是否等于初始数据地址来确定这是否中断。
但是,这似乎是不可行的,因为我相信使用 C 编程您无法监控汇编中的每条指令执行。这是如何在一般情况下或特定于PowerPC 完成的?是否有任何特殊的汇编指令或调试寄存器可以简化这一点?
【问题讨论】:
-
确实是“调试寄存器”。所有现代非平凡处理器都内置了断点等硬件。借助多核、流水线和其他功能/优化,硬件协助调试至关重要。