ブレークポイントはPPCにどのように実装されていますか(具体的には、OS Xの場合)?
たとえば、x86では通常INT 3命令(0xCC)で実行されます-ppcのこれに匹敵する命令はありますか?または、それらを設定/実装する他の方法はありますか?
gdbとそれ自体を16進ダンプする関数を使用すると、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
編集:「GNUgdb 6.3.50-20050815(Appleバージョンgdb-696)(Sat Oct 20 18:20:28 GMT 2007)」を使用しています
編集2:条件付きブレークポイントが他の形式を使用する可能性もあります。tw
またはtwi
、必要な値がすでにレジスターにあり、デバッガーがヒット数を追跡する必要がない場合もあります。
ソフトウェア ブレークポイントに加えて、PPC はハードウェア ブレークポイントもサポートしており、 IABR
(IABR2
コア バージョンによっては ) レジスタを介して実装されます。これらは命令ブレークポイントですが、データ ブレークポイントもあります ( DABR
and で実装されている可能性がありDABR2
ます)。コアが 2 セットのハードウェア ブレークポイント レジスタをサポートしている場合 (つまり IABR2 と DABR2 が存在する場合)、特定のアドレスでトリガーするだけでなく、連続するアドレス範囲全体をブレークポイント ターゲットとして指定できます。データブレークポイントの場合、書き込み、読み取り、または任意のアクセスでトリガーするかどうかを指定することもできます。
PowerPC アーキテクチャは「トラップ」を使用します。
最良の推測は、'tw' または 'twi' 命令です。
PPC gdb のソース コードを掘り下げることができます。OS X はおそらくその FreeBSD ルートと同じ機能を使用しています。
私は信頼できる(しかし現在は酩酊状態にあるので、一粒の塩でそれを取る)情報源から、それは違法であり、ある種のシステムトラップを引き起こすゼロ命令であると言われています。
編集:私の友人が絶対的なゴミを話しているほど酔っている場合に備えて、コミュニティwikiになりました:-)