Точки останова PPC - PullRequest
       5

Точки останова PPC

3 голосов
/ 29 ноября 2008

Как реализована точка останова в PPC (в частности, в OS X)?

Например, на x86 это обычно делается с помощью инструкции INT 3 (0xCC) - есть ли инструкция, сравнимая с этой для ppc? Или есть какой-то другой способ, которым они установлены / реализованы?

Ответы [ 6 ]

6 голосов
/ 23 апреля 2012

С помощью gdb и функции, которая сама себя создает, я получаю 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) (Сб 20 октября 18:20:28 GMT 2007)"

РЕДАКТИРОВАНИЕ 2: Также возможно, что условные точки останова будут использовать другие формы tw или twi, если требуемые значения уже есть в регистрах, а отладчик не нужно следить за количеством попаданий.

4 голосов
/ 29 ноября 2008

Помимо программных точек останова, PPC также поддерживает аппаратные точки останова, реализуемые через регистры IABR (и, возможно, IABR2, в зависимости от версии ядра). Это точки прерывания инструкций, но есть также точки прерывания данных (реализовано с DABR и, возможно, DABR2). Если ваше ядро ​​поддерживает два набора аппаратных регистров точек останова (т.е. присутствуют IABR2 и DABR2), вы можете сделать больше, чем просто выполнить запуск по определенному адресу: вы можете указать целый непрерывный диапазон адресов в качестве цели точки останова. Для точек останова данных вы также можете указать, хотите ли вы, чтобы они запускались при записи, чтении или любом доступе.

1 голос
/ 18 мая 2010

В архитектурах PowerPC используются «ловушки».

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

1 голос
/ 29 ноября 2008

Лучшее предположение - это инструкция tw или twi.

Вы можете покопаться в исходном коде PPC GDB, OS X, вероятно, использует ту же функциональность, что и его корни FreeBSD.

0 голосов
/ 29 мая 2017

Точки останова команды обычно реализуются с помощью инструкции TRAP или с помощью регистра аппаратного отладки IABR.

Пример реализации: ArchLinux , Apple , Wii и Wii U .

0 голосов
/ 29 ноября 2008

Надежный (но в настоящее время опьяненный, так что возьмите его с крошкой соли) источник говорит мне, что это нулевая инструкция, которая недопустима и вызывает какую-то ловушку системы.

РЕДАКТИРОВАТЬ: Сделано в сообществе вики на случай, если мой друг настолько пьян, что говорит абсолютную чушь: -)

...