регистр отладки x86
В архитектуре x86 регистр отладки — это регистр, используемый процессором для программы отладки . Существует шесть регистров отладки, называемых DR0 ... DR7 , причем DR4 и DR5 являются устаревшими синонимами DR6 и DR7. Регистры отладки позволяют программистам выборочно включать различные условия отладки, связанные с набором из четырех адресов отладки. Два из этих регистров используются для управления функциями отладки. Доступ к этим регистрам осуществляется с помощью вариантов инструкции MOV. Регистр отладки может быть операндом-источником или операндом-приемником. Регистры отладки являются привилегированными ресурсами; инструкции MOV, которые обращаются к ним, могут выполняться только с нулевым уровнем привилегий . Попытка прочитать или записать регистры отладки при выполнении на любом другом уровне привилегий вызывает общую ошибку защиты .
от DR0 до DR3
[ редактировать ]Каждый из этих регистров содержит линейный адрес , связанный с одним из четырех условий точки останова. Каждое условие точки останова дополнительно определяется битами в DR7.
Регистры адреса отладки эффективны независимо от того, ли подкачка включена . Адреса в этих регистрах являются линейными адресами. Если пейджинг включен, линейные адреса преобразуются в физические адреса процессора с помощью механизма пейджинга . Если пейджинг не включен, эти линейные адреса совпадают с физическими адресами.
Обратите внимание, что когда подкачка включена, разные задачи могут иметь разные сопоставления линейных и физических адресов. В этом случае адрес в регистре адреса отладки может иметь отношение к одной задаче, но не относиться к другой. По этой причине x86 имеет в DR7 как глобальные, так и локальные биты разрешения. Эти биты указывают, имеет ли данный адрес отладки глобальную (все задачи) или локальную (только текущая задача) актуальность.
DR6 – статус отладки
[ редактировать ]Регистр состояния отладки позволяет отладчику определить, какие условия отладки произошли. Когда процессор обнаруживает включенное исключение отладки, он устанавливает соответствующие биты этого регистра перед входом в обработчик исключений отладки.
Биты | Аббревиатура | Описание |
---|---|---|
0 | Б0 | Обнаружено состояние точки останова № 0 [а] |
1 | Б1 | Обнаружено состояние точки останова № 1 [а] |
2 | Б2 | Обнаружено состояние точки останова № 2 [а] |
3 | Б3 | Обнаружено состояние точки останова №3 [а] |
10:4 | — | Сдержанный. Читаются как все 0 на процессорах 386/486 и все 1 на более поздних процессорах. [3] |
11 | БЛД | Сбрасывается процессором в 0 для исключений блокировки шины. [б] [4] На процессорах, которые не поддерживают исключения Bus Lock Trap, бит 11 DR6 доступен только для чтения и действует так же, как биты 10:4. |
12 | БК, SMS |
(только 386/486) Введен режим SMM или ICE. [3] (см. также DR7, бит 12). Зарезервировано и читается как 0 на всех более поздних процессорах. |
13 | БД | Обнаружен доступ к регистру отладки [с] [д] [и] (см. также DR7, бит 13). |
14 | БС | Одношаговое выполнение (включено EFLAGS.TF ) [д] |
15 | БТ | Точка останова переключения задач. [д] Происходит при переключении задач с помощью TSS , у которого установлен бит T (флаг отладочной ловушки). |
16 | РТМ | процессоры с Intel TSX ) ( Только Сбрасывается процессором в 0 для исключений отладки внутри транзакций RTM. [ф] установлено значение 1 для всех исключений отладки вне транзакций. На процессорах без TSX бит 16 DR6 доступен только для чтения и действует так же, как биты 31:17. |
31:17 | — | Сдержанный. Читаются как все 0 на процессорах 386/486/ 6x86 и как все 1 на более поздних процессорах. |
63:32 | — | (только x86–64) Зарезервировано. Читать как все 0. Должно быть записано как все 0. |
- ^ Перейти обратно: а б с д B0–B3 устанавливаются для каждого условия точки останова, которое было выполнено во время создания исключения отладки.
В некоторых реализациях B0-B3 могут быть установлены для точек останова, которые совпадают, но не включены. [1] - следовательно, обработчик отладки должен проверять только биты, соответствующие включенным точкам останова.
Кроме того, от реализации зависит, будет ли аппаратное обеспечение очищать B0-B3 для несовпадающих условий точки останова, поэтому обработчикам отладки рекомендуется вручную очищать эти биты перед возвратом к прерванной задаче. [2]
- ^ Когда ловушка блокировки шины включена с использованием бита 2
DEBUGCTL
( МСР1D9h
), любая инструкция, вызывающая блокировку шины (в основном инструкции, использующиеLOCK
префикс для выполнения атомов памяти, которые выходят за границы строк кэша или работают с некэшируемой памятью), очистит бит 11 DR6 и вызовет исключение #DB типа ловушки. В противном случае этот бит не устанавливается и не очищается процессорами — обработчикам отладки рекомендуется устанавливать этот бит в 1 перед возвратом к прерванной задаче. - ^ Указывает, что следующая инструкция в потоке инструкций обращается к регистру отладки.
В некоторых реализациях этот бит может быть установлен, даже если DR7.GD не установлен. [1]
- ^ Перейти обратно: а б с Биты 13,14 и 15 DR6 никогда не сбрасываются аппаратно — поэтому обработчикам отладки рекомендуется вручную очищать эти биты перед возвратом к прерванной задаче.
- ^ Бит 13 зарезервирован на всех процессорах Cyrix .
- ^ Если внутри транзакции обнаружено состояние исключения отладки, процессор прервет транзакцию. Если включена расширенная отладка транзакций RTM, тогда будет выдано исключение отладки как исключение типа сбоя на
XBEGIN
инструкция, запустившая транзакцию, в противном случае транзакция прерывается без возникновения исключений.
DR7 — контроль отладки
[ редактировать ]Регистр управления отладкой используется для выборочного включения условий четырех адресных точек останова и для указания типа и размера каждой из четырех точек останова. Существует два уровня включения: локальный (0,2,4,6) и глобальный (1,3,5,7). Биты локального разрешения автоматически сбрасываются процессором при каждом переключении задачи, чтобы избежать нежелательных состояний точки останова в новой задаче. Биты глобального разрешения не сбрасываются переключением задачи; следовательно, их можно использовать для условий, которые являются глобальными для всех задач.
Биты | Аббревиатура | Описание |
---|---|---|
0 | Л0 | Локальное включение точки останова №0. |
1 | G0 | Глобальное включение точки останова №0. |
2 | Л1 | Локальное включение точки останова №1. |
3 | Г1 | Глобальное включение точки останова №1. |
4 | Л2 | Локальное включение точки останова №2. |
5 | G2 | Глобальное включение точки останова №2. |
6 | Л3 | Локальное включение точки останова №3. |
7 | G3 | Глобальное включение точки останова №3. |
8 | ТО | (только 386) Включение локальной точной точки останова. [а] |
9 | GE | (только 386) Включение глобальной точной точки останова. [а] |
10 | — | Зарезервировано, доступно только для чтения, читается как 1 и должно записываться как 1. |
11 | РТМ | процессоры с Intel TSX ) ( Только Включить расширенную отладку транзакций RTM (только если DEBUGCTL бит 15 также установлен) На других процессорах: зарезервировано, доступно только для чтения, читается как 0 и должно записываться как 0. |
12 | И, ОН МОЖЕТ |
(только процессоры 386/486) Действие при совпадении точки останова: 0 = INT 1 (исключение #DB, по умолчанию) 1 = Переход к ICE/SMM [б] На других процессорах: зарезервировано, доступно только для чтения, читается как 0 и должно записываться как 0. |
13 | ГД | Общее включение обнаружения. Если установлено, будет вызывать исключение отладки при любой попытке доступа к регистрам DR0-DR7. [с] |
15:14 | — | Зарезервировано, должно быть записано как все 0. [д] |
17:16 | Ч/Б0 | Условие точки останова для точки останова №0. [и] |
19:18 | ЛЕН0 | Длина точки останова для точки останова №0. [ф] |
21:20 | Ч/З1 | Условие точки останова для точки останова №1. [и] |
23:22 | ЛЕН1 | Длина точки останова №1. [ф] |
25:24 | Ч/З2 | Условие точки останова для точки останова №2. [и] |
27:26 | ТОЛЬКО 2 | Длина точки останова для точки останова №2. [ф] |
29:28 | Ч/З3 | Условие точки останова для точки останова №3. [и] |
31:30 | ЛЕН3 | Длина точки останова для точки останова №3. [ф] |
63:32 | — | (только x86–64) Зарезервировано. Читать как все 0. Должно быть записано как все 0. |
- ^ Перейти обратно: а б На процессорах 80386 включение точных точек останова приводит к возникновению исключений точки останова данных как исключений типа ловушки для инструкции, которая выполнила доступ к данным. Если точные точки останова не включены, исключения точек останова данных могут быть задержаны одной или несколькими инструкциями. [5] Включение точных точек останова приводит к значительному снижению производительности 80386. [1]
На более поздних процессорах точки останова всегда точны — биты 9:8 DR7 все еще присутствуют как записываемые биты, и их рекомендуется устанавливать, но они игнорируются ЦП.
- ^ Установка бита 12 DR7 на 1 изменяет действие точек останова, одношагового режима, общего обнаружения (см. бит 13) и поведение
F1h
("ICEBP"
/"INT01"
) опкод для:- На процессорах Intel 386/486 перейдите к внутрисхемной эмуляции . [6] (Это приведет к зависанию системы, если ICE не подключен.)
- На процессорах AMD и IBM 386/486 перейдите в режим управления системой . [7] [3]
- ^ Перед входом в обработчик исключений отладки бит 13 DR6 будет установлен, а бит 13 DR7 будет очищен, чтобы можно было получить доступ к регистрам DR0-DR7 внутри обработчика.
- ^ Сообщается, что на некоторых процессорах 386/486 бит 14 DR7 включает сообщения трассировки ветвей. [8] и бит 15 для включения сообщений трассировки задач. [3] Эти сообщения предназначены для использования во внутрисхемной эмуляции и могут вызвать нестабильность системы, если ICE не подключен.
- ^ Перейти обратно: а б с д Поддерживаемые условия точки останова:
Ценить Перерыв 00b
Только выполнение инструкций 01b
Данные записывает только 10b
Ввод-вывод читает и записывает
(определяется только если CR4.DE =1)11b
Данные читаются и пишутся 10b
на процессорах, где бит CR4.DE отсутствует или установлен в ноль, значение не определено.Для точек останова выполнения инструкций длина точки останова должна быть установлена равной
00b
(1 байт), иначе поведение не определено. - ^ Перейти обратно: а б с д Поддерживаемые длины точек останова:
Ценить Длина точки останова 00b
1 байт 01b
2 байта 10b
8 байт
(определяется только в 64-битном режиме)11b
4 байта Поведение при использовании длины точки останова
10b
(8 байт) вне 64-битного режима не определено.
ДР4 и ДР5
[ редактировать ]Не настоящие регистры. На процессорах, поддерживающих бит CR4.DE (Intel Pentium и новее), их поведение контролируется CR4.DE:
- CR4.DE=0: DR4 и DR5 являются псевдонимами DR6 и DR7 соответственно.
- CR4.DE=1: доступ к DR4/5 приводит к исключению #UD (неверный код операции).
На процессоре без CR4.DE поведение официально не определено — обычно DR4/5 ассоциируются с DR6/7, но существуют исключения, которые используются для обнаружения ЦП. [9]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Джон Кроуфорд и Пэт Гелсингер, «Программирование 80386», 1987 (ISBN 0-89588-381-3), глава 8, страницы 635–636.
- ^ Intel, Руководство разработчика программного обеспечения , номер заказа. 325462-078, дек 2022, том 3, раздел, 18.2.3, стр. 3640
- ^ Перейти обратно: а б с д Группа хакеров Потемкина, OPCODE.LST, версия 4.51, 15 октября 1999 г.
- ^ Intel, Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32 , номер заказа. 325462-079, март 2023 г., том 3, главы 18.2.3 и 18.3.1.6 на стр. 3636 и 3643.
- ^ AMD, Справочник по микропроцессорам Am386 для персональных компьютеров , номер заказа. 11339C, 15 октября 1992 г., стр. 38.
- ^ Роберт Коллинз, Режим управления системой Intel , январь 1997 г. Архивировано из оригинала 13 июня 1997 г.
- ^ «Высокопроизводительные маломощные встроенные микропроцессоры Am386®SX/SXL/SXLV» (PDF) . , публикация № 21020, ред. А, апрель 1997 г., страницы 5 и 6.
- ^ Роберт Коллинз, Недокументированные фрагменты в DR7 . Архивировано из оригинала 1 декабря 1996 г.
- ^ Джефф Чаппелл, Идентификация ЦП до CPUID , 30 декабря 2021 г. Доступ: 29 января 2023 г.
- Справочник программиста Intel 80386
Внешние ссылки
[ редактировать ]- http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspx Использование регистров отладки в Windows.