Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: OsDevNewbie am 18. January 2015, 22:03
-
Hallo,
um meinen Kernelinternen-Debugger zu vervollständigen verwende ich die Debugregister der CPU um Breakpoints zu setzten. Aber sobald ich einen Breakpoint gesetzt habe bleibt die CPU einfach hängen und es passiert einfach nichts mehr. Nicht mal mehr Interrupts werden durchgelassen.
Kennt sich jemand mit Debugregistern aus und/oder kann mir einer helfen wie man das richtig macht?
Ich es sehr.
-
So weit ich mich erinnere, muss man dafür auch ein paar Flags in den Kontrollregistern setzen (aus dem Kopf weiß ich gerade nicht, welche). Wie sieht denn dein Code dazu aus?
-
Der Code zum setzten des Breakpoints sieht bei mir so aus:
asm volatile(
"mov %0,%%db0;"
"mov %%db7,%%rax;"
"or %1,%%rax;"
"mov %%rax,%%db7"
: : "r"(BreakPoint), "r"((uint64_t)0x3 << (2 * i)) : "rax");
"i" entspricht dabei dem Index welcher Breakpoint gesetzt werden soll (momentan immer 1).
-
Ups ich habe den Fehler gefunden.
Es funktioniert schon so wie ich das gemacht habe, nur verwendet bei mir der Tastaturtreiber die Heapverwaltung, welche ich so debuggen wollte => bei jedem Tastenschlag wurde die Debugexception ausgelöst und irgendwie wird nach dem 2. mal keine mehr ausgelöst.