wake-up-neo.net

Was ist der Unterschied zwischen Hardware- und Software-Haltepunkten?

Was ist der Unterschied zwischen Hardware- und Software-Haltepunkten?

Sind Hardware-Haltepunkte schneller als Software-Haltepunkte, wenn ja, wie und warum brauchen wir dann überhaupt die Software-Haltepunkte?

25
Aquarius_Girl

Dieser Artikel enthält eine gute Diskussion über Vor- und Nachteile: http://www.nynaeve.net/?p=80

Um Ihre Frage direkt zu beantworten, sind Software-Haltepunkte flexibler, da Hardware-Haltepunkte in einigen Funktionen eingeschränkt sind und stark von der Architektur abhängig sind. Ein Beispiel in diesem Artikel ist, dass für x86-Hardware ein Limit von 4 Hardware-Haltepunkten besteht.

Hardware-Haltepunkte sind schneller, weil sie dedizierte Register haben und weniger Aufwand als Software-Haltepunkte.

23
SpliFF

Sie können durch GDB-Interna gehen , es erklärt sehr gut die HW- und SW-Haltepunkte.

HW-Haltepunkte müssen von der MCU unterstützt werden. Die ARM -Controller verfügen über spezielle Register, in die Sie bei jedem PC (Programmzähler) == sp Register CPU-Speicher schreiben können. Jtag ist normalerweise erforderlich, um in diese Spezialregister zu schreiben.

SW-Haltepunkte werden in GDB implementiert, indem ein Trap oder eine illegale Division oder eine andere Anweisung eingefügt wird, die eine Ausnahmebedingung auslöst. Wenn dies auftritt, nimmt gdb die Ausnahmebedingung und stoppt das Programm. Wenn der Benutzer zum Fortfahren auffordert, stellt gdb die ursprüngliche Anweisung wieder her, stellt den Einzelschritt wieder her, fügt die Falle erneut ein und fährt fort.

Die Verwendung von HW-Debuggern gegenüber SW-Debuggern bietet viele Vorteile, insbesondere wenn Sie mit Interrupts und Speicherbusgeräten arbeiten. AFAIK-Interrupts können nicht mit Software-Debugger debuggt werden.

14
Kamath

Hardware-Haltepunkte sind eigentlich Komparatoren, die den aktuellen PC mit der Adresse im Komparator vergleichen (sofern aktiviert). Hardware-Haltepunkte sind die beste Lösung, wenn Haltepunkte gesetzt werden. Wird normalerweise über den Debug-Probe eingestellt (mithilfe von JTAG, SWD, ...). Der Nachteil von Hardware-Haltepunkten: Sie sind begrenzt. CPUs haben nur eine begrenzte Anzahl von Hardware-Haltepunkten (Komparatoren). Die Anzahl der verfügbaren Hardware-Haltepunkte hängt von der CPU ab. ARM 7/9 Kerne verfügen über 2 moderne ARM Geräte (Cortex-M 0,3,4) zwischen 2 und 6, X86 in der Regel 4.

Software-Haltepunkte werden tatsächlich durch Ersetzen der Anweisung, die durch einen Haltepunktbefehl ersetzt werden soll, gesetzt. Die Haltepunktanweisung ist in den meisten CPUs vorhanden und normalerweise so kurz wie die kürzeste Anweisung, also nur ein Byte auf x86 (0xcc, INT 3). Bei Cortex-M-CPUs bestehen die Anweisungen aus 2 oder 4 Bytes, die Haltepunktanweisung ist also eine 2-Byte-Anweisung.

Software-Haltepunkte können leicht eingestellt werden, wenn sich das Programm in RAM befindet (z. B. auf einem PC). Bei vielen eingebetteten Systemen befindet sich das Programm im Flash-Speicher. Hier ist es nicht so einfach, die Anweisung auszutauschen, da der Flash neu programmiert werden muss, so dass hauptsächlich Hardware-Haltepunkte verwendet werden. Die meisten Debug-Tests unterstützen nur Hardware-Haltepunkte, wenn sich das Programm im Flash-Speicher befindet. Einige (z. B. J-Link von SEGGER) ermöglichen jedoch die Neuprogrammierung des Flash-Speichers mit Haltepunktbefehl und erlauben auch eine unbegrenzte Anzahl von (Software-) Haltepunkten, selbst wenn ein in Flash befindliches Programm debuggt wird.

Weitere Informationen zu Software-Haltepunkten im Flash-Speicher

12
Rolf

Zusätzlich zu den obigen Antworten ist es auch wichtig zu beachten, dass, während Software-Haltepunkte bestimmte Anweisungen im Programm überschreiben, um zu wissen, wo sie stoppen sollen, die begrenzte Anzahl von Hardware-Haltepunkten tatsächlich Teil des Prozessors ist.

Justin Seitz weist in seinem Buch Gray Hat Python darauf hin, dass der wichtige Unterschied hier darin besteht, dass Software-Haltepunkte durch Überschreiben von Anweisungen tatsächlich das CRC der Datei ändern, und so auch jede Art von Ein Programm wie etwa eine Malware, die seinen CRC berechnet, kann sein Verhalten als Reaktion auf das Setzen von Haltepunkten ändern. Bei Hardware-Haltepunkten ist es weniger offensichtlich, dass der Debugger bestimmte Codeabschnitte stoppt und durchläuft.

4
a10y

Kurz gesagt, Hardware-Haltepunkte verwenden dedizierte Register und sind daher in ihrer Anzahl begrenzt. Diese können sowohl im flüchtigen als auch im nichtflüchtigen Speicher eingestellt werden. 

Software-Haltepunkte werden gesetzt, indem der Befehlscode im RAM - Speicher durch einen Haltepunktbefehl ersetzt wird. Diese können nur im RAM -Speicher eingestellt werden (Flash-Speicher können nicht beschrieben werden) und sind nicht begrenzt.

Dieser Artikel enthält eine gute Erklärung zu Haltepunkten.

Danke und Grüße, Shivakumar V W

1
Shivakumar

Watchpoints sind ein Fall, bei dem die Hardware-Handhabung viel schneller ist:

watch var
rwatch var
awatch var

Wenn Sie diese Befehle in GDB 7.7 x86-64 eingeben, heißt es:

Hardware watchpoint 2: var

Diese Hardwarefunktionalität für x86 wird unter folgender Adresse erwähnt: http://en.wikipedia.org/wiki/X86_debug_register

Möglicherweise ist dies aufgrund der vorhandenen Paging-Schaltung möglich, die jeden Speicherzugriff verwaltet.

Die "Software" Alternative ist zu Einzelschritt das Programm , das sehr langsam ist.

Vergleichen Sie das mit regulären Haltepunkten, bei denen mindestens die Softwareimplementierung und die int3-Anweisung ausführt und das Programm ausgeführt werden kann, sodass Sie nur dann einen Overhead zahlen, wenn ein Haltepunkt erreicht wird.

Einige Zitate aus dem Hilfedokument zum Intel System Debugger:

Hardware vs. Software-Haltepunkte Der Debugger kann beide Hardware verwenden und Software-Haltepunkte, jeder von ihnen hat Stärken und Schwächen:

Hardware-Haltepunkte werden mithilfe der DRx-Architektur implementiert Haltepunktregister, die im Intel SDM beschrieben werden. Sie haben die Vorteil, direkt beim Reset verwendbar zu sein, nichtflüchtig zu sein und verwendbar mit Flash oder einem anderen Nur-Lese-Speicher. Der Nachteil ist dass sie eine begrenzte Ressource sind. Software-Haltepunkte erfordern Ändern des Systemspeichers bei deren Implementierung durch Ersetzen von Opcode am gewünschten Ort mit einer speziellen Anweisung. Das macht Sie sind eine unbegrenzte Ressource, aber die Speicherabhängigkeit bedeutet, dass Sie nicht Installieren Sie sie, bevor ein Modul in den Speicher geladen wird, und wenn Die Zielsoftware überschreibt diesen Speicher, dann werden sie ungültig. Im Allgemeinen jede Debug-Funktion, die vom Debugger aktiviert werden muss bleibt nach einem Reset nicht bestehen und kann nach anderen .__ beeinflusst werden. Architekturmodusübergänge wie SMM-Einstieg/-Ausgang oder VM Eingang/Ausgang Spezielle Beispiele sind:

Beim CPU-Reset werden alle Debug-Funktionen gelöscht, mit Ausnahme der Reset-Pause. Diese bedeutet zum Beispiel, dass vom Benutzer angegebene Haltepunkte ungültig sind bis das Ziel nach dem Zurücksetzen einmal anhält. Beachten Sie, dass dieser Halt .__ sein kann. Entweder aufgrund einer Reset-Pause oder aufgrund eines vom Benutzer eingeleiteten Stopps. Im In beiden Fällen stellt der Debugger die erforderlichen Debug-Funktionen wieder her. Mit SMM Entry/Exit werden Haltepunkte deaktiviert/erneut aktiviert. Dies bedeutet, dass Sie Sie können keinen Haltepunkt in SMRAM angeben, wenn Sie außerhalb von SMRAM angehalten wurden. Ob Wenn Sie die Pause innerhalb des SMRAM wünschen, müssen Sie zuerst am SMM anhalten Entry-Break und den Haltepunkt manuell anwenden. Alternativ können Sie Aktualisieren Sie das BIOS, um die Haltepunkte wieder zu aktivieren, wenn Sie SMM eingeben. erfordert die Fähigkeit, das BIOS zu ändern, das nicht in .__ verwendet werden kann. produktionscode.

0
smwikipedia