Регистр отладки X86 - X86 debug register

На архитектура x86, а регистр отладки регистр, используемый процессором для программа отладка. Есть шесть регистров отладки, названных DR0...DR7, с DR4 и DR5 как устаревшие синонимы DR6 и DR7. Регистры отладки позволяют программистам выборочно включать различные условия отладки, связанные с набором из четырех адресов отладки. Два из этих регистров используются для управления функциями отладки. Доступ к этим регистрам осуществляется вариантами инструкции MOV. Регистр отладки может быть операндом-источником или операндом-адресатом. Регистры отладки - это привилегированные ресурсы; инструкции MOV, которые обращаются к ним, могут быть выполнены только в уровень привилегий нуль. Попытка прочитать или записать регистры отладки при выполнении на любом другом уровне привилегий вызывает общая ошибка защиты.

DR0 в DR3

Каждый из них регистры содержит линейный адрес связано с одним из четырех условий точки останова. Каждый точка останова Состояние дополнительно определяется битами в DR7.

Регистры адреса отладки действуют независимо от того, пейджинг включен. Адреса в этих регистрах являются линейными. Если пейджинг включен, линейные адреса преобразуются в физические адреса процессором механизм пейджинга. Если подкачка не включена, эти линейные адреса совпадают с физическими адресами.

Обратите внимание, что при включении разбиения на страницы разные задачи могут иметь разные линейные сопоставления адресов с физическими. В этом случае адрес в регистре адресов отладки может иметь отношение к одной задаче, но не иметь отношения к другой. По этой причине x86 имеет как глобальные, так и локальные биты разрешения в DR7. Эти биты указывают, имеет ли данный отладочный адрес глобальную (все задачи) или локальную (только текущую задачу) актуальность.

DR7 - контроль отладки

Восемь младших битов DR7 (0,2,4,6 и 1,3,5,7) выборочно активируют четыре условия точки останова по адресу. Есть два уровня включения: локальный (0,2,4,6) и глобальный (1,3,5,7). Биты локального разрешения автоматически сбрасываются процессором при каждом переключении задачи, чтобы избежать нежелательных условий точки останова в новой задаче. Биты глобального разрешения не сбрасываются переключателем задачи; следовательно, их можно использовать для условий, которые являются глобальными для всех задач.

Биты 16-17 (соответствующие DR0), 20-21 (DR1), 24-25 (DR2), 28-29 (DR3) определяют, когда срабатывают точки останова. Каждая точка останова имеет двухбитную запись, которая указывает, прерываются ли они при выполнении (00b), записи данных (01b), чтении или записи данных (11b). 10b означает прерывание при чтении или записи ввода-вывода, но никакое оборудование не поддерживает его.[нужна цитата ] Биты 18-19 (DR0), 22-23 (DR1), 26-27 (DR2), 30-31 (DR3) определяют, насколько большая область памяти просматривается точками останова. Опять же, каждая точка останова имеет двухбитную запись, которая указывает, наблюдают ли они: один (00b), два (01b), восемь (10b).[1] или четыре (11b) байта.[2]

DR6 - статус отладки

Регистр состояния отладки позволяет отладчику определять, какие условия отладки возникли. Когда процессор обнаруживает включенное исключение отладки, он устанавливает младшие биты этого регистра (0,1,2,3) перед вводом обработчик исключений отладки.

Обратите внимание, что биты DR6 никогда не сбрасываются процессором. Чтобы избежать путаницы при идентификации следующего исключения отладки, обработчик отладки должен переместить нули в DR6 непосредственно перед возвратом.

Смотрите также

Рекомендации

  1. ^ http://www.sandpile.org/x86/drx.htm
  2. ^ GNU GDB 6.5 gdb / i386-nat.c
  • Справочник программиста Intel 80386

внешняя ссылка