![]() |
Debug Control Register (DR7) richtig setzen
Hi,
ich stehe gerade vor einem großen Problem: wie setze ich das Dr7 mit seinen Flags fuer größe und action? Gibt es dafuer schon fertige Funktionen oder muss ich das ganze per Hand machen und wenn ja wie? Fuer alle die nicht wissen was gemeint ist, hier noch ein link zum thema: ![]() lg win32 |
Re: Debug Control Register (DR7) richtig setzen
Mach dir erstmal Gedanken wie du deinen (Delphi)Code im Kernelmode ausführen willst. Debug-Register sind privilegierte Ressourcen. IA-32 Intel Architecture Software Developer's Manual - Volume 3: System Programming Guide, 15-2.
|
Re: Debug Control Register (DR7) richtig setzen
Ich benutze zur zeit Get/SetThreadContext, in den kernel wollte ich dann doch nicht :D
Haette ich dazu schreiben sollen, sry. |
Re: Debug Control Register (DR7) richtig setzen
Aha, gut, dann verweise ich dennoch auf die Quelle welche ich oben schon angab.
Die kannst du als PDF runterladen oder kostenlos als Hardcopy bestellen. Übrigens dort dann Sektion "15.2.4 Debug Control Register (DR7)" auf Seite 15-5 (Kapitel 15, eben). |
Re: Debug Control Register (DR7) richtig setzen
In meinem ersten post habe die entsprechdende sektion des pdfs als html-version verlinkt.
Ich stehe noch immer vor meinem eigentlich problem: Wie setze ich die einzellnen bits des registers? lg win32 |
Re: Debug Control Register (DR7) richtig setzen
Es ist zwar nicht exakt die gleiche Sektion (inhaltlich), aber egal.
Wie setzt man nun ein Bit? Wie wäre es mit den Bit-Operationen? Erst die Bitmasken (vorzugsweise als Konstanten deklarieren): Bit0: $00000001 Bit1: $00000002 Bit2: $00000004 Bit3: $00000008 Bit4: $00000010 Bit5: $00000020 Bit6: $00000040 Bit7: $00000080 Bit8: $00000100 Bit9: $00000200 BitA: $00000400 BitB: $00000800 ... usw. usf. Dann setzt man bspw. Bit 3 so:
Code:
... überprüft es so:
dw := dw or $00000008;
Code:
... oder löscht es so:
if(dw and $00000008 <> 0)then
Code:
... ich bin leicht schockiert, daß du mit sowas rumspielen willst, wenn du nichtmal diese Grundlagen beherrschst. Wundert mich übrigens, daß das "einfach so" gehen soll. Immerhin sind gerade für diese Geschichten sonst Umwege über Exception-Handler nötig.
dw := (dw and (not $00000008));
|
Re: Debug Control Register (DR7) richtig setzen
Siehe da. Wären wir also wieder bei meiner ersten Antwort. Ein kurzer Blick in die Doku hat gereicht (hatte ich mir zuvor gespart, weil ich deine Frage offenbar mißverstanden hatte).
Zitat:
|
Re: Debug Control Register (DR7) richtig setzen
Danke, ich werde es mir nochmal anschauen, wenn ich Probleme haben sollte melde ich mich.
win32 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz