Skip to content

Commit c46d76a

Browse files
committed
Fixing pass_memory-breakpoint logic
1 parent bef410a commit c46d76a

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

windows/debug/breakpoints.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def __init__(self, addr, size=None, events=None):
5555
self.size = size if size is not None else self.DEFAULT_SIZE
5656
events = events if events is not None else self.DEFAULT_EVENTS
5757
self.events = set(events)
58+
self._reput_pages = [] # The current memory BP page that is passed
5859

5960
def trigger(self, dbg, exception):
6061
"""Called when breakpoint is hit"""

windows/debug/debugger.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,9 @@ def _setup_breakpoint_MEMBP(self, bp, target):
422422
return True
423423

424424
def _restore_breakpoint_MEMBP(self, bp, target):
425-
(page_addr, page_prot) = bp._reput_page
426-
return target.virtual_protect(page_addr, PAGE_SIZE, page_prot, None)
425+
for (page_addr, page_prot) in bp._reput_pages:
426+
target.virtual_protect(page_addr, PAGE_SIZE, page_prot, None)
427+
bp._reput_pages.clear()
427428

428429

429430
def _remove_breakpoint_MEMBP(self, bp, target):
@@ -542,7 +543,7 @@ def _pass_memory_breakpoint(self, bp, page_protect, fault_page):
542543
ctx = thread.context
543544
ctx.EEFlags.TF = 1
544545
thread.set_context(ctx)
545-
bp._reput_page = (fault_page, page_prot.value)
546+
bp._reput_pages.append((fault_page, page_prot.value))
546547
self._breakpoint_to_reput[cp.pid].add(bp)
547548

548549
# debug event handlers
@@ -665,6 +666,7 @@ def _handle_exception_access_violation(self, exception, excp_addr):
665666
fault_type = exception.ExceptionRecord.ExceptionInformation[0]
666667
fault_addr = exception.ExceptionRecord.ExceptionInformation[1]
667668
pc_addr = self.current_thread.context.pc
669+
dbgprint("Handling access_violation at pc={0:#x} addr={1:#x}".format(pc_addr, fault_addr), "DBG")
668670
if fault_addr == pc_addr:
669671
fault_type = EXEC
670672
event = EVENT_STR[fault_type]

0 commit comments

Comments
 (0)