如何在 PPC 上实现断点(具体来说,在 OS X 上)?
例如,在 x86 上,它通常使用 INT 3 指令 (0xCC) 完成——对于 ppc 是否有与此相当的指令?还是有其他方式设置/实现它们?
使用 gdb 和一个 hexdumps 自身的函数,我得到 0x7fe00008。这似乎是tw 指令:
0b01111111111000000000000000001000
011111 31
11111 condition flags: lt, gt, ge, logical lt, logical gt
00000 rA
00000 rB
0000000100 constant 4
0 reserved
即比较 r0 和 r0 并捕获任何结果。
GDB反汇编只是扩展助记符trap
编辑:我正在使用“GNU gdb 6.3.50-20050815(Apple 版本 gdb-696)(2007 年 10 月 20 日星期六 18:20:28 GMT)”
编辑2:条件断点也可能使用其他形式,tw
或者twi
如果所需的值已经在寄存器中并且调试器不需要跟踪命中计数。
除了软件断点,PPC 还支持硬件断点,通过IABR
(并且可能IABR2
,取决于内核版本)寄存器实现。这些是指令断点,但也有数据断点(使用DABR
and,可能,实现DABR2
)。如果您的内核支持两组硬件断点寄存器(即存在 IABR2 和 DABR2),您可以做的不仅仅是在特定地址上触发:您可以指定整个连续范围的地址作为断点目标。对于数据断点,您还可以指定是否希望它们在写入、读取或任何访问时触发。
最好的猜测是“tw”或“twi”指令。
您可以深入研究 PPC gdb 的源代码,OS X 可能使用与其 FreeBSD 根相同的功能。
PowerPC 架构使用“陷阱”。
一个可靠的(但目前已经醉了,所以带着一粒盐)消息来源告诉我,这是一个零指令,它是非法的并且会导致某种系统陷阱。
编辑:进入社区维基,以防我的朋友喝醉了,他说的绝对是垃圾:-)