debugging - operativa - manejo de interrupciones sistemas operativos
¿Cuál es la diferencia entre los puntos de interrupción de hardware y software? (7)
Además de las respuestas anteriores, también es importante tener en cuenta que si bien los puntos de interrupción del software sobrescriben las instrucciones específicas en el programa para saber dónde detenerse, la cantidad más limitada de puntos de interrupción de hardware es realmente parte del procesador.
Justin Seitz en su libro Grey Hat Python señala que la diferencia importante aquí es que al sobrescribir las instrucciones, los puntos de interrupción del software realmente cambian el CRC del archivo, por lo que cualquier programa, como una pieza de malware que calcula su CRC, puede cambiar su el comportamiento en respuesta a los puntos de interrupción establecidos, mientras que con los puntos de interrupción de hardware es menos obvio que el depurador se está deteniendo y atravesando ciertos fragmentos de código.
¿Cuál es la diferencia entre los puntos de interrupción de hardware y software?
¿Se dice que los puntos de interrupción de hardware son más rápidos que los de software? Si es así, ¿cómo y también por qué necesitamos los puntos de interrupción de software?
Algunas citas del documento de ayuda Intel System Debugger:
Puntos de interrupción de hardware frente a software El depurador puede usar los puntos de interrupción de hardware y software, cada uno de estos tiene fortalezas y debilidades:
Los puntos de interrupción de hardware se implementan utilizando los registros de puntos de interrupción arquitectónicos de DRx descritos en Intel SDM. Tienen la ventaja de que se pueden utilizar directamente en el reinicio, no son volátiles y se pueden usar con flash u otra memoria de solo lectura. El inconveniente es que son un recurso finito. Los puntos de interrupción del software requieren la modificación de la memoria del sistema a medida que se implementan al reemplazar el código de operación en la ubicación deseada con una instrucción especial. Esto los convierte en un recurso ilimitado, pero la dependencia de la memoria significa que no puede instalarlos antes de que se cargue un módulo en la memoria, y si el software de destino sobrescribe esa memoria, se volverán inválidos. En general, cualquier función de depuración que debe ser habilitada por el depurador no persiste después de un restablecimiento, y puede verse afectada después de otras transiciones de modo arquitectónico, como la entrada / salida de SMM o la entrada / salida de VM. Los ejemplos específicos incluyen:
El restablecimiento de la CPU borrará todas las funciones de depuración, excepto la interrupción del restablecimiento. Esto significa, por ejemplo, que los puntos de interrupción especificados por el usuario no serán válidos hasta que el objetivo se detenga una vez después del restablecimiento. Tenga en cuenta que esta detención puede deberse a un reinicio de interrupción o a una detención iniciada por el usuario. En cualquier caso, el depurador restaurará las funciones de depuración necesarias. La entrada / salida de SMM deshabilitará / volverá a habilitar los puntos de interrupción, esto significa que no puede especificar un punto de interrupción en SMRAM mientras está detenido fuera de SMRAM. Si desea la interrupción dentro de SMRAM, primero debe detener la interrupción de entrada de SMM y aplicar manualmente el punto de interrupción. Alternativamente, puede parchear el BIOS para volver a habilitar los puntos de interrupción al ingresar a SMM, pero esto requiere la capacidad de modificar el BIOS que no se puede usar en el código de producción.
En resumen, los puntos de interrupción de hardware hacen uso de registros dedicados y, por lo tanto, son limitados en número. Estos se pueden configurar en memoria tanto volátil como no volátil.
Los puntos de interrupción del software se establecen al reemplazar el código de operación de la instrucción en la memoria RAM con instrucciones de punto de interrupción. Estos se pueden configurar solo en la memoria RAM (la memoria flash no se puede escribir) y no están limitados.
Este artículo proporciona una buena explicación sobre los puntos de interrupción.
Gracias y saludos, Shivakumar VW
Este artículo proporciona una buena discusión de los pros y los contras: http://www.nynaeve.net/?p=80
Para responder a su pregunta directamente, los puntos de interrupción del software son más flexibles porque los puntos de interrupción de hardware están limitados en algunas funciones y dependen mucho de la arquitectura. Un ejemplo dado en el artículo es que el hardware x86 tiene un límite de 4 puntos de interrupción de hardware.
Los puntos de interrupción de hardware son más rápidos porque tienen registros dedicados y menos sobrecarga que los puntos de interrupción de software.
Los puntos de interrupción de hardware son en realidad comparadores, comparando la PC actual con la dirección en el comparador (cuando está habilitado). Los puntos de interrupción de hardware son la mejor solución al establecer puntos de interrupción. Por lo general, se establece a través de la sonda de depuración (utilizando JTAG, SWD, ...). La desventaja de los puntos de interrupción de hardware: son limitados. Las CPU solo tienen un número limitado de puntos de interrupción de hardware (comparadores). El número de puntos de interrupción de hardware disponibles depende de la CPU. Los núcleos ARM 7/9 tienen 2 dispositivos ARM modernos (Cortex-M 0,3,4) entre 2 y 6, x86 generalmente 4.
De hecho, los puntos de interrupción del software se establecen al reemplazar la instrucción a punto de interrupción con una instrucción de punto de interrupción. La instrucción de punto de interrupción está presente en la mayoría de las CPU, y generalmente es tan corta como la instrucción más corta, por lo que solo hay un byte en x86 (0xcc, INT 3). En las CPU Cortex-M, las instrucciones son de 2 o 4 bytes, por lo que la instrucción de punto de interrupción es una instrucción de 2 bytes.
Los puntos de interrupción del software se pueden establecer fácilmente si el programa se encuentra en la RAM (como en una PC). Muchos sistemas integrados tienen el programa ubicado en la memoria flash. Aquí no es tan fácil intercambiar las instrucciones, ya que es necesario reprogramar el flash, por lo que los puntos de interrupción de hardware se utilizan principalmente. La mayoría de las sondas de depuración solo admiten puntos de interrupción de hardware si el programa se encuentra en la memoria flash. Sin embargo, algunos (como el J-Link de SEGGER) permiten reprogramar la memoria flash con instrucciones de punto de interrupción y también permiten un número ilimitado de puntos de interrupción (software) incluso cuando se depura un programa ubicado en flash.
Más información sobre los puntos de interrupción del software en la memoria flash
Puede ir a través de GDB internos , está muy bien explica los puntos de interrupción de HW y SW.
Los puntos de interrupción de HW son algo que requieren soporte de MCU. Los controladores ARM tienen registros especiales donde puede escribir algo de espacio de direcciones, siempre que la PC (contador de programas) == sp registra que la CPU se detiene. Generalmente se requiere que Jtag escriba en esos registros especiales.
Los puntos de interrupción de SW se implementan en GDB al insertar una trampa, una división ilegal o alguna otra instrucción que cause una excepción, y luego, cuando se encuentra, gdb tomará la excepción y detendrá el programa. Cuando el usuario diga que continúe, gdb restaurará la instrucción original, en un solo paso, volverá a insertar la captura y continuará.
Hay muchas ventajas en el uso de depuradores HW sobre los depuradores de software, especialmente si se trata de interrupciones y dispositivos de bus de memoria. Las interrupciones de AFAIK no se pueden depurar con los depuradores de software.
Los puntos de observación son un caso donde el manejo del hardware es mucho más rápido:
watch var
rwatch var
awatch var
Cuando ingresas esos comandos en GDB 7.7 x86-64 dice:
Hardware watchpoint 2: var
Esta capacidad de hardware para x86 se menciona en: http://en.wikipedia.org/wiki/X86_debug_register
Es probable que sea posible debido al circuito de paginación existente, que administra todos los accesos a la memoria.
La alternativa del "software" es el programa de un solo paso , que es muy lento.
Compare eso con los puntos de interrupción regulares, donde al menos la implementación del software inserta la instrucción int3
y permite que el programa se ejecute, por lo que solo paga los gastos generales cuando se alcanza un punto de interrupción.