Ich schreibe ihm Moment einen kleinen Debugger, womit ich durch Hardware-Haltepunkte auf Ereignisse innerhalb einer anderen Anwendung reagieren kann.
Wenn die Adresse von meinem Haltepunkt ausgelöst wird, erhalte ich die Nachricht "Breakpoint reached!". Das Problem ist nun, dass mein Debugger nicht zur nächsten Anweisung im Speicher springt und stattdessen mein Haltepunkt in einer Endlosschleife ausgelöst wird (der Haltepunkt soll nur ausgelöst werden, wenn der Code ausgeführt wird).
In einem Thread auf stackoverflow schreibt jemand, dass man die Resume Flag (EFlag) setzen soll, allerdings hat er kein Beispiel gezeigt oder einen Wert genannt, den man in das Context.EFlag-Register schreiben könnte.
Die Antwort aus dem Thread: stackoverflow.com/a/38479357
Wen Ihr mir weiterhelfen könntet, wäre ich sehr dankbar!
Wenn die Adresse von meinem Haltepunkt ausgelöst wird, erhalte ich die Nachricht "Breakpoint reached!". Das Problem ist nun, dass mein Debugger nicht zur nächsten Anweisung im Speicher springt und stattdessen mein Haltepunkt in einer Endlosschleife ausgelöst wird (der Haltepunkt soll nur ausgelöst werden, wenn der Code ausgeführt wird).
VB.NET-Quellcode
- Do
- WaitForDebugEvent(DebugEvent, &HFFFFFFF)
- If DebugEvent.Exception.ExceptionRecord.ExceptionCode = EXCEPTION_SINGLE_STEP Then
- If DebugEvent.Exception.ExceptionRecord.ExceptionAddress = BreakpointAddress Then
- System.Console.WriteLine("Breakpoint reached!")
- End If
- End If
- ContinueDebugEvent(DebugEvent.dwProcessId, DebugEvent.dwThreadId, DBG_CONTINUE)
- Loop
In einem Thread auf stackoverflow schreibt jemand, dass man die Resume Flag (EFlag) setzen soll, allerdings hat er kein Beispiel gezeigt oder einen Wert genannt, den man in das Context.EFlag-Register schreiben könnte.
Die Antwort aus dem Thread: stackoverflow.com/a/38479357
VB.NET-Quellcode
- Do
- WaitForDebugEvent(DebugEvent, &HFFFFFFF)
- If DebugEvent.Exception.ExceptionRecord.ExceptionCode = EXCEPTION_SINGLE_STEP Then
- If DebugEvent.Exception.ExceptionRecord.ExceptionAddress = BreakpointAddress Then
- Dim hThread2 As IntPtr = OpenThread(&H1F03FF, False, DebugEvent.dwThreadId)
- If GetThreadContext(hThread2, Context) Then
- Context.EFlags = &H0 'Welcher Wert soll hier rein?
- SetThreadContext(hThread2, Context)
- End If
- CloseHandle(hThread2)
- System.Console.WriteLine("Breakpoint reached!")
- End If
- End If
- ContinueDebugEvent(DebugEvent.dwProcessId, DebugEvent.dwThreadId, DBG_CONTINUE)
- Loop
Wen Ihr mir weiterhelfen könntet, wäre ich sehr dankbar!
"Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Vultrax“ ()