Autor Thema: Benutzen von Debuggregistern  (Gelesen 3124 mal)

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« 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.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

xenos1984

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 19. January 2015, 08:13 »
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?

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #2 am: 19. January 2015, 21:22 »
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).
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #3 am: 21. January 2015, 01:34 »
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.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

 

Einloggen