3

如何在 PPC 上实现断点(具体来说,在 OS X 上)?

例如,在 x86 上,它通常使用 INT 3 指令 (0xCC) 完成——对于 ppc 是否有与此相当的指令?还是有其他方式设置/实现它们?

4

6 回答 6

6

使用 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如果所需的值已经在寄存器中并且调试器不需要跟踪命中计数。

于 2012-04-23T19:09:06.487 回答
4

除了软件断点,PPC 还支持硬件断点,通过IABR(并且可能IABR2,取决于内核版本)寄存器实现。这些是指令断点,但也有数据断点(使用DABRand,可能,实现DABR2)。如果您的内核支持两组硬件断点寄存器(即存在 IABR2 和 DABR2),您可以做的不仅仅是在特定地址上触发:您可以指定整个连续范围的地址作为断点目标。对于数据断点,您还可以指定是否希望它们在写入、读取或任何访问时触发。

于 2008-11-29T13:43:47.503 回答
1

最好的猜测是“tw”或“twi”指令。

您可以深入研究 PPC gdb 的源代码,OS X 可能使用与其 FreeBSD 根相同的功能。

于 2008-11-29T13:30:16.800 回答
1

PowerPC 架构使用“陷阱”。

http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.aixassem/doc/alangref/twi.htm

于 2010-05-17T21:26:39.573 回答
0

指令断点通常通过TRAP指令或IABR调试硬件寄存器来实现。

示例实现: ArchLinuxAppleWiiWii U

于 2017-05-29T15:05:26.407 回答
-1

一个可靠的(但目前已经醉了,所以带着一粒盐)消息来源告诉我,这是一个零指令,它是非法的并且会导致某种系统陷阱。

编辑:进入社区维基,以防我的朋友喝醉了,他说的绝对是垃圾:-)

于 2008-11-29T09:32:00.867 回答