| Zeile 4: | Zeile 4: | ||
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. | 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 | + | Das Kapitel zu den Debug Registern im System Programming Guide der 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 88: | Zeile 88: | ||
== Siehe auch == | == Siehe auch == | ||
| − | *Intel Manuals - Volume 3: System Programming Guide | + | *Intel Manuals - Volume 3: System Programming Guide |
[[Kategorie:x86]] | [[Kategorie:x86]] | ||