Hi Leute,
ich schreibe mir zur Zeit einen eigenen Debugger. Ich bin auch schon ziemlich weit. Allerdings habe ich schon seit längerem einen Bug und eine Frage, welche ich bis jetzt nicht lösen konnte.
Der Bug:
Immer wenn ich eine .exe lade, oder mich an einen Prozess ankoppele, gibt es direkt danach ein Debugevent. Und zwar einen Breakpoint. Ich habe aber keinen gesetzt. Wie kann das sein? Es muss doch an meinem Code liegen, oder muss man diesen ersten Breakpoint einfach ignorieren? Aber selbst wenn stellt sich ja die Frage, warum er auftaucht. Hier mal der Code, der aufgerufe wird, wenn es ein Debugevent gibt:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
def HandleDebugEvent(self, eEvent):
# Was fuer ein Event wurde ausgeloest?
if eEvent.dwDebugEventCode == EXCEPTION_DEBUG_EVENT:
# Eine Ausnahme ist aufgetreten!
# In behandeln...
Exception = eEvent.u.Exception.ExceptionRecord.ExceptionCode
if Exception == EXCEPTION_ACCESS_VIOLATION:
print "Access Violation detected!"
self.HandleCommandDbg()
self.dbgmode = False
elif Exception == EXCEPTION_BREAKPOINT:
self.HandleBreakpoint(eEvent)
elif Exception == EXCEPTION_GUARD_PAGE:
print "Guard Page Access detected!"
self.HandleCommandDbg()
self.dbgmode = False
elif Exception == EXCEPTION_SINGLE_STEP:
print "Single Step detected!"
self.HandleCommandDbg()
self.dbgmode = False
elif eEvent.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT:
self.dbgmode = False
|
Und nun die Frage:
Ich kann Breakpoints an Funktionsaufrufe positionieren. Aber wie bekomme ich die übergebenen Argumente? Die sind ja auf dem Stack, aber wie komme ich daran?
Ich hoffe, mir kann jemand helfen, und bedanke mich für Hilfe schon einmal im Voraus.[/code]