Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Debug Control Register (DR7) richtig setzen (https://www.delphipraxis.net/90756-debug-control-register-dr7-richtig-setzen.html)

Win32.API 23. Apr 2007 13:49


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: http://pdos.csail.mit.edu/6.828/2005...02.htm#fig12-1

lg win32

Olli 23. Apr 2007 17:39

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.

Win32.API 23. Apr 2007 17:45

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.

Olli 23. Apr 2007 17:53

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).

Win32.API 23. Apr 2007 17:58

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

Olli 23. Apr 2007 18:30

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:
dw := dw or $00000008;
... überprüft es so:

Code:
if(dw and $00000008 <> 0)then
... oder löscht es so:

Code:
dw := (dw and (not $00000008));
... 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.

Olli 23. Apr 2007 18:40

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:

Pointer to the CONTEXT structure that contains the context to be set in the specified thread. The value of the ContextFlags member of this structure specifies which portions of a thread's context to set. Some values in the CONTEXT structure that cannot be specified are silently set to the correct value. This includes bits in the CPU status register that specify the privileged processor mode, global enabling bits in the debugging register, and other states that must be controlled by the operating system.
Ich hatte Luckie mal erklärt wie man es unter Delphi macht. Kann man nämlich auch für Kopierschutzgeschichten benutzen. Vielleicht hat er ja Zeit es dir zu erklären, habe keine Zeit es nochmal (zumal in Delphi) durchzukauen.

Win32.API 23. Apr 2007 18:43

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