2012-01-16 9 views

Respuesta

21

Este artículo proporciona una buena discusión de los pros y los contras: http://www.nynaeve.net/?p=80

para responder a sus preguntas directamente a los puntos de interrupción de software son más flexibles porque los puntos de interrupción de hardware están limitadas en algunas funciones y altamente dependiente 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 del software.

+0

¡Ah, entonces no podemos tener interrupciones de hardware ilimitadas! Ok, entonces, incluso si los puntos de interrupción del software son lentos, ¡no tenemos otra opción! Gracias, el enlace se ve bien. –

+1

+1: nynaeve es uno de los mejores blogs de RE en la red IMO :) – Necrolis

+0

@TheIndependentAquarius Técnicamente, no puede tener _unlimited_ puntos de interrupción del software;) –

14

Puede ir a través de GDB internals, explica muy bien los puntos de interrupción HW y SW.

Los puntos de corte HW son algo que requiere soporte de MCU. Los controladores ARM tienen registros especiales en los que puede escribir algún espacio de direcciones, siempre que el PC (contador de programa) == sp registra la CPU. Por lo general, se requiere que Jtag escriba en esos registros especiales.

Los puntos de interrupción SW se implementan en GDB insertando una trampa, o una división ilegal, o alguna otra instrucción que causará una excepción, y luego cuando se encuentre, gdb tomará la excepción y detendrá el programa. Cuando el usuario dice que continúe, gdb restaurará la instrucción original, de un solo paso, volverá a insertar la trampa y continuará.

Hay muchas ventajas en el uso de depuradores HW sobre depuradores SW especialmente si se trata de interrupciones y dispositivos de bus de memoria. Las interrupciones de AFAIK no se pueden depurar con depuradores de software.

4

Además de las respuestas anteriores, también es importante tener en cuenta que aunque los puntos de interrupción del software sobrescriben 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 Gray Hat Python señala que la diferencia importante aquí es que al sobrescribir instrucciones, los puntos de interrupción del software realmente cambian el archivo CRC, por lo que cualquier tipo de programa como un malware que calcule su CRC puede cambie su comportamiento en respuesta a los puntos de interrupción que se establecen, mientras que con los puntos de interrupción de hardware es menos obvio que el depurador se está deteniendo y pasando por ciertos trozos de código.

1

En resumen, los puntos de corte de hardware hacen uso de registros dedicados y, por lo tanto, tienen un número limitado. Estos se pueden configurar tanto en la memoria volátil y no volátil.

Los puntos de interrupción del software se establecen reemplazando el código de operación de la instrucción en la memoria RAM con la instrucción de punto de interrupción. Estos solo se pueden configurar en la memoria RAM (la memoria flash no se puede escribir) y no están limitados.

This article provides good explanation about breakpoints.

Gracias y saludos, Shivakumar V W

+0

El enlace está muerto, elimine o actualice –

9

puntos de interrupción de hardware son los comparadores realidad, la comparación de la PC actual con la dirección en el comparador (cuando está activado). Los puntos de interrupción de hardware son la mejor solución al establecer puntos de interrupción.Normalmente se establece a través de la sonda de depuración (utilizando JTAG, SWD, ...). La desventaja de los puntos de interrupción del hardware: son limitados. Las CPU tienen solo un número limitado de puntos de interrupción de hardware (comparadores). La cantidad 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 usualmente 4.

Los puntos de interrupción del software se establecen de hecho sustituyendo las instrucciones para ser breakpoints con un 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 tan corta como la instrucción más corta, por lo que solo 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 está ubicado 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 el flash necesita ser reprogramado, por lo que los puntos de corte de hardware se usan principalmente. La mayoría de las sondas de depuración solo admiten puntos de corte de hardware si el programa está ubicado en la memoria flash. Sin embargo, algunos (como el J-Link de SEGGER) permiten la reprogramación de la memoria flash con la instrucción de punto de interrupción y permiten una cantidad ilimitada de puntos de interrupción (de software) incluso cuando se depura un programa ubicado en el flash.

More info about software breakpoints in flash memory

+1

Agregue algunos saltos de línea, esto es muy difícil de leer! – Joel

0

puntos de observación son un caso en el manejo de hardware es mucho más rápido:

watch var 
rwatch var 
awatch var 

Al entrar en los comandos de GDB 7.7 x86-64 que 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 megafonía existente, que gestiona todos los accesos a la memoria.

La alternativa del "software" es single step the program, que es muy lento.

Compárelo con los puntos de interrupción normales, donde al menos se inserta la implementación del software y la instrucción int3 y permite que el programa se ejecute, de modo que solo pague gastos generales cuando se golpea un punto de interrupción.

0

Algunos cita del Intel Sistema depurador ayuda doc:

Hardware vs Software puntos de interrupción El depurador puede utilizar tanto de hardware y software puntos de ruptura, cada uno de ellos tiene fortalezas y debilidades:

Los puntos de interrupción de hardware se implementan usando los registros de punto de interrupción arquitectónicos de DRx descritos en Intel SDM. Tienen la ventaja de de ser utilizables directamente en el reinicio, no son volátiles, y pueden utilizarse con flash u otra memoria de solo lectura. La desventaja es que son un recurso finito. Puntos de interrupción del software requieren modificando 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 hace que sea un recurso ilimitado, pero la dependencia de memoria significa que no puede instalarlos antes de cargar 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 habilitar el depurador no persiste después de un restablecimiento y puede verse afectada después de otras transiciones de modo arquitectónico como entrada/salida SMM o entrada/salida VM . Los ejemplos específicos incluyen:

Restablecimiento de CPU borrará todas las funciones de depuración, excepto el restablecimiento de la interrupción. Esto significa, por ejemplo, que los puntos de corte 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 este alto puede ser debido a una pausa de reinicio o debido a un alto iniciado por el usuario. En , en cualquier caso, el depurador restaurará las funciones de depuración necesarias. SMM La entrada/salida deshabilitará/volverá a habilitar los puntos de interrupción, esto significa que no puede especificar un punto de interrupción en SMRAM mientras se detiene fuera de SMRAM. Si desea la interrupción dentro de SMRAM, primero debe detenerse en la entrada de SMM y aplicar manualmente el punto de interrupción. Alternativamente, puede parchear el BIOS para volver a habilitar los puntos de corte al ingresar a SMM, pero este requiere la capacidad de modificar el BIOS que no se puede usar en el código de producción .

Cuestiones relacionadas