En la arquitectura x86 , un registro de depuración es un registro utilizado por un procesador para depurar programas . Hay seis registros de depuración, llamados DR0 ... DR7 , con DR4 y DR5 como sinónimos obsoletos para DR6 y DR7. Los registros de depuración permiten a los programadores habilitar selectivamente varias condiciones de depuración asociadas con un conjunto de cuatro direcciones de depuración. Dos de estos registros se utilizan para controlar las funciones de depuración. A estos registros se accede mediante variantes de la instrucción MOV. Un registro de depuración puede ser el operando de origen o el operando de destino. Los registros de depuración son recursos privilegiados; las instrucciones MOV que acceden a ellas solo se pueden ejecutar a nivel de privilegiocero. Un intento de leer o escribir los registros de depuración cuando se ejecuta en cualquier otro nivel de privilegio provoca una falla de protección general .
DR0 a DR3
Cada uno de estos registros contiene la dirección lineal asociada con una de las cuatro condiciones de punto de interrupción. Cada condición de punto de interrupción se define además mediante bits en DR7.
Los registros de direcciones de depuración son efectivos tanto si la paginación está habilitada como si no . Las direcciones de estos registros son direcciones lineales. Si la paginación está habilitada, las direcciones lineales se traducen en direcciones físicas mediante el mecanismo de paginación del procesador . Si la paginación no está habilitada, estas direcciones lineales son las mismas que las direcciones físicas.
Tenga en cuenta que cuando la paginación está habilitada, diferentes tareas pueden tener diferentes asignaciones de direcciones lineales a físicas. Cuando este es el caso, una dirección en un registro de direcciones de depuración puede ser relevante para una tarea pero no para otra. Por esta razón, el x86 tiene bits de habilitación tanto globales como locales en DR7. Estos bits indican si una dirección de depuración determinada tiene una relevancia global (todas las tareas) o local (solo la tarea actual).
DR7 - Control de depuración
Los ocho bits de orden inferior de DR7 (0,2,4,6 y 1,3,5,7) habilitan selectivamente las condiciones de punto de interrupción de cuatro direcciones. Hay dos niveles de habilitación: los niveles local (0,2,4,6) y global (1,3,5,7). El procesador restablece automáticamente los bits de habilitación local en cada cambio de tarea para evitar condiciones de punto de interrupción no deseadas en la nueva tarea. Los bits de habilitación global no se restablecen mediante un interruptor de tarea; por lo tanto, se pueden usar para condiciones que son globales para todas las tareas.
Los bits 16-17 (correspondientes a DR0), 20-21 (DR1), 24-25 (DR2), 28-29 (DR3), definen cuándo se activan los puntos de interrupción. Cada punto de interrupción tiene una entrada de dos bits que especifica si se rompen en la ejecución (00b), escritura de datos (01b), lectura o escritura de datos (11b). 10b se define como una interrupción en la lectura o escritura de E / S, pero ningún hardware lo admite. [ cita requerida ] Los bits 18-19 (DR0), 22-23 (DR1), 26-27 (DR2), 30-31 (DR3), definen qué tan grande es un área de memoria observada por puntos de interrupción. Una vez más, cada punto de interrupción tiene una entrada de dos bits que especifica si miran uno (00b), dos (01b), ocho (10b) [1] o cuatro (11b) bytes. [2]
DR6 - Estado de depuración
El registro de estado de depuración permite al depurador determinar qué condiciones de depuración se han producido. Cuando el procesador detecta una excepción de depuración habilitada, establece los bits de orden inferior de este registro (0,1,2,3) antes de ingresar al manejador de excepciones de depuración .
Tenga en cuenta que el procesador nunca borra los bits de DR6. Para evitar cualquier confusión al identificar la siguiente excepción de depuración, el controlador de depuración debe mover ceros a DR6 inmediatamente antes de regresar.
Ver también
Referencias
- ^ http://www.sandpile.org/x86/drx.htm
- ^ GNU GDB 6.5 gdb / i386-nat.c
- Referencia del programador Intel 80386
enlaces externos
- http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspx Usando los registros de depuración en Windows.