Bul*_*aza 2 c assembly powerpc
如何breakpoint read/write实施?请注意,这与...不同breakpoint execute.
我们的想法是从数据存储器地址开始,然后找到从/向该地址读/写的汇编指令.从理论上讲,我们必须检查寄存器和正在执行的下一条指令(考虑位移偏移),以确定是否为真.假设当前指令是"存储字":stw r0, 4 (r31)所以它写入地址r31 + 4.我们可以通过读取值来确定是否中断r31,添加4并检查它是否等于初始数据地址.
然而,这似乎是不可行的,因为使用C编程你不能监视我相信的汇编中的每个指令执行.这是如何一般地或特定于PowerPC完成的?是否有任何特殊的汇编指令或调试寄存器来简化这一过程?
在PowerPC中,与具有此类功能的所有其他CPU一样,这是通过硬件支持完成的.有一个特殊的寄存器"数据地址断点"(DABR),您可以在其中设置应检查的存储器地址以及是否应该读取和/或写入访问等.
然后,当某些指令对该给定地址执行读或写操作时,CPU将触发中断(数据存储中断).从ISR中,您只需要检查返回地址以查看您是如何在那里结束的,然后您获得了导致中断的指令的程序地址.
有关详细信息,请查看PowerISA手册.(他们的网站http://www.power.org/似乎已经下降了)