X86 Debug-Register

Auf der x86-Architektur, ist eine Debug-Register ein Register von einem Prozessor für die Programmfehlersuche verwendet. Es gibt sechs Debug-Register, mit dem Namen DR0 ... DR7, mit DR4 und DR5 als veraltet Synonyme für DR6 und DR7. Die Debug-Register ermöglicht Programmierern, um selektiv verschiedene Debug-Bedingungen mit einem Satz von vier Debug-Adressen zugeordnet. Zwei dieser Register werden verwendet, um Debug-Funktionen zu steuern. Diese Register werden von Varianten der MOV-Befehl abgerufen. Eine Debug-Register können entweder das Quelloperanden oder Zieloperanden sein. Die Debug-Register sind privilegiert Ressourcen; die MOV-Anweisungen, die auf sie zugreifen kann nur auf Berechtigungsstufe Null durchgeführt werden. Ein Versuch zu lesen oder zu schreiben, die Debug-Register bei der Ausführung an einer anderen Berechtigungsebene verursacht eine allgemeine Schutzverletzung.

DR0 zu DR3

Jedes dieser Register enthält die lineare Adresse mit einer von vier Haltepunktbedingungen verbunden. Jeder Breakpoint Bedingung wird durch Bits in DR7 definiert.

Die Debug-Adressregister wirksam sind, ob Paging aktiviert ist. Die Adressen in dieser Register sind lineare Adressen. Wenn Paging aktiviert ist, werden die linearen Adressen in physikalische Adressen von Paging-Mechanismus des Prozessors übersetzt. Wenn Paging nicht aktiviert ist, sind die gleichen wie physikalische Adressen diese linearen Adressen.

Beachten Sie, dass, wenn Paging aktiviert ist, können unterschiedliche Aufgaben unterschiedliche lineare in physische Adressenzuordnungen aufweisen. Wenn dies der Fall ist, kann eine Adresse in einem Debug-Adreßregister relevant eine Aufgabe, aber nicht zu einer anderen zu sein. Aus diesem Grund ist die x86 hat sowohl globale als auch lokale Freigabe-Bits in DR7. Diese Bits zeigen, ob eine bestimmte Debug-Adresse verfügt über eine globale oder lokale Bedeutung.

DR7 - Debug Steuer

Die niederwertigen acht Bits des DR7 selektiv aktivieren Sie die vier Adresshaltepunkt Bedingungen. Es gibt zwei Ebenen ermöglichen: die lokaler und globaler Ebene. Die lokalen Freigabe-Bits werden automatisch vom Prozessor Reset bei jedem Taskwechsel, um unerwünschte Haltepunkt Bedingungen in der neuen Aufgabe zu vermeiden. Die globalen Freigabe-Bits werden nicht von einer Taskwechsel zurückzusetzen; daher können sie für die Bedingungen, die global für alle Aufgaben verwendet werden.

Bits 16-17, 20-21, 24-25, 28-29, zu definieren, wenn Breakpoints auslösen. Jeder Haltepunkt hat einen Zwei-Bit-Eintrag, der angibt, ob sie sich auf die Ausführung zu brechen, Daten zu schreiben, Daten lesen oder schreiben. 10b ist so definiert, dass Pause auf IO lesen oder zu schreiben, aber keine Hardware unterstützt wird. Bits 18-19, 22-23, 26-27, 30-31, zu definieren, wie groß ein Bereich des Speichers wird durch Haltepunkte beobachtet. Wieder jeden Haltepunkt hat einen Zwei-Bit-Eintrag, ob sie zu sehen ein, zwei, acht oder vier Bytes angibt.

DR6 - Debug-Status

Die Debug-Statusregister ermöglicht den Debugger zu bestimmen, welche Debug-Bedingungen eingetreten sind. Wenn der Prozessor erkennt einen aktivierten Debug-Ausnahme, setzt es die Bits niedriger Ordnung des Registers vor dem Eintritt in die Debug-Exception-Handler.

Man beachte, dass die Bits DR6 niemals vom Prozessor gelöscht. Um Verwechslungen bei der Identifizierung der nächsten Austestausnahme vermeiden, sollte die Debug-Handler Nullen DR6 bewegen unmittelbar vor der Rückkehr.

  0   0
Vorherige Artikel 21. Schacholympiade
Nächster Artikel Engels-Junge

Kommentare - 0

Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha