| Zeile 1: | Zeile 1: | ||
| − | Die '''Debug Register''' ermöglichen es eine Debug [[Exception]] ''#DB'' (Int 1) auszulösen, wenn bestimmte Ereignisse eintreten. Die Register ''DR0'' bis ''DR3'' enthalten dabei die [[lineare Adresse]] | + | Die '''Debug Register''' ermöglichen es eine Debug [[Exception]] ''#DB'' (Int 1) auszulösen, wenn bestimmte Ereignisse eintreten. Die Register ''DR0'' bis ''DR3'' enthalten dabei jeweils die [[lineare Adresse]] eines Breakpoints. Dies kann ein Befehl, ein Datenbereich oder ein [[I/O-Ports|I/O-Port]] sein. Zu jedem dieser Register gehören mehrere Flags im Register ''DR7'', die die Art des Breakpoints festlegen. Die CPU setzt beim Auslösen einer Debug Exception im Register ''DR6'' bestimmte Flags, die anzeigen welche Breakpoints erreicht wurden. |
== Verwendung == | == Verwendung == | ||
| − | Um einen Breakpoint zu setzen lädt man eines der Register ''DR0'' bis ''DR3'' mit der Adresse und setzt die entsprechenden Flags in ''DR7''. Beim Erreichen des Breakpoints wird der Interrupt 1 (''#DB'') ausgelöst. Bei der Behandlung sollte man das DR6 Register auswerten, und danach auf 0 setzen, da die CPU möglicherweise nicht automatisch alle Flags zurücksetzt. Um zu verhindern, dass dieser Breakpoint bei der Rückkehr aus der ISR direkt wieder ausgelöst wird, sollte das Resume Flag (''RF'') im [[EFLAGS]]-Register (auf dem Stack) gesetzt werden. | + | Um einen Breakpoint zu setzen, lädt man eines der Register ''DR0'' bis ''DR3'' mit der Adresse und setzt die entsprechenden Flags in ''DR7''. Beim Erreichen des Breakpoints wird der Interrupt 1 (''#DB'') ausgelöst. Bei der Behandlung sollte man das DR6 Register auswerten, und danach auf 0 setzen, da die CPU möglicherweise nicht automatisch alle Flags vor der nächsten Exception zurücksetzt. Um zu verhindern, dass dieser Breakpoint bei der Rückkehr aus der ISR direkt wieder ausgelöst wird, sollte das Resume Flag (''RF'') im [[EFLAGS]]-Register (auf dem Stack) gesetzt werden. |
| − | Kapitel 18 des Intel Manuals sollte vor der Implementierung von Debugfunktionen gelesen werden. Im | + | Kapitel 18 des Intel Manuals sollte vor der Implementierung von Debugfunktionen gelesen werden. Im Folgenden ein grober Überblick über die wichtigsten Flags der Register ''DR6'' und ''DR7''. |
=== DR7 === | === DR7 === | ||
DR7 legt fest, wann welcher Breakpoint ausgelöst werden soll. | DR7 legt fest, wann welcher Breakpoint ausgelöst werden soll. | ||
| Zeile 30: | Zeile 30: | ||
=== DR6 === | === DR6 === | ||
| − | DR6 zeigt an, | + | DR6 zeigt an, welche Bedingung einen Breakpoint ausgelöst hat. |
{| {{Prettytable}} | {| {{Prettytable}} | ||
! 31-16 || 15 || 14 || 13 || 12 || 11-4 || 3 || 2 || 1 || 0 | ! 31-16 || 15 || 14 || 13 || 12 || 11-4 || 3 || 2 || 1 || 0 | ||