def add_breakpoint(self, address, breakpoint): assert not self.running breakpoint.old_value = debug.vm_read_wrapper(self.task, address, 1) if breakpoint.old_value != '\xCC': self.breakpoints[address] = breakpoint debug.vm_write_wrapper(self.task, address, '\xCC')
def search_memory(self, values): assert not self.running # find all allocated memory regions = [] address = 1 while 1: try: region = debug.vm_region(self.task, address) except OSError as e: break regions.append(region) address = regions[-1].address + regions[-1].size for region in regions: address = region.address size = region.size try: data = debug.vm_read_wrapper(self.task, address, size) except OSError as e: continue if values in data: return address + data.index(values) return None
def read_memory(self, address, length): return debug.vm_read_wrapper(self.task, address, length)