Hallo,
ich wollte mir einen einfachen Debugger schreiben, scheitere aber schon an der ersten Hürde, ich kann die Debug-Register dr0-7 nicht beschreiben.
Das Programm kompiliert zwar, stürzt dann aber mit Error 0xc0000096 Privileged Instruction bei der ersten mov Operation ins Debugreister ab.
Auf verschiedenen Seiten hab ich gelesen, dass diese Register nur im Ring 0 angesprochen werden dürfen, also nur vom Kernel oder Treiber.
Allerdings kann das Visual Studio auch debuggen und nutzt wahrscheinlich auch diese Register, wie macht Microsoft das, oder gibt es eine (einfache) Lösung, mit der man auf diese Register zugreifen kann.
Ich nutze:
Windows 7 x64
Visual C++ 2008 Express Edition
Mein Quellcode für das Testprogramm:
ich wollte mir einen einfachen Debugger schreiben, scheitere aber schon an der ersten Hürde, ich kann die Debug-Register dr0-7 nicht beschreiben.
Das Programm kompiliert zwar, stürzt dann aber mit Error 0xc0000096 Privileged Instruction bei der ersten mov Operation ins Debugreister ab.
Auf verschiedenen Seiten hab ich gelesen, dass diese Register nur im Ring 0 angesprochen werden dürfen, also nur vom Kernel oder Treiber.
Allerdings kann das Visual Studio auch debuggen und nutzt wahrscheinlich auch diese Register, wie macht Microsoft das, oder gibt es eine (einfache) Lösung, mit der man auf diese Register zugreifen kann.
Ich nutze:
Windows 7 x64
Visual C++ 2008 Express Edition
Mein Quellcode für das Testprogramm:
Code:
[SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff]#include [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4][COLOR=#a31515][SIZE=4][COLOR=#a31515]<iostream>[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff]using [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff]name space[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4] std;[/SIZE]
[SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4] main([/SIZE][SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4] argc, [/SIZE][SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff]char[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4]* argv[])[/SIZE]
[SIZE=4]{[/SIZE]
[SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff] int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4] zahl=0,zahl2=123;[/SIZE]
[SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff] __asm[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=4] {[/SIZE]
[SIZE=4] mov eax,[zahl][/SIZE]
[SIZE=4] mov dr0,eax[/SIZE]
[SIZE=4] mov ebx,dr0[/SIZE]
[SIZE=4] mov [zahl2],ebx[/SIZE]
[SIZE=4] }[/SIZE]
[SIZE=4] cout<<zahl2;[/SIZE]
[SIZE=4] system([/SIZE][SIZE=4][COLOR=#a31515][SIZE=4][COLOR=#a31515]"PAUSE"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4]);[/SIZE]
[SIZE=4][COLOR=#0000ff][SIZE=4][COLOR=#0000ff] return[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=4] 0;[/SIZE]
[SIZE=4]}[/SIZE]
Zuletzt bearbeitet: