diff options
| author | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-10-24 15:28:15 +0000 |
|---|---|---|
| committer | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-11-06 17:20:13 +0000 |
| commit | ae65ae4d0a3013b83ae9bdf0b3b91291748c9d96 (patch) | |
| tree | f0115bcf775f68cc07157db1ec11180a4f678789 /src/focaccia/lldb_target.py | |
| parent | aba970d960a4842bbd899f557c8e0229ec20ad0c (diff) | |
| download | focaccia-ae65ae4d0a3013b83ae9bdf0b3b91291748c9d96.tar.gz focaccia-ae65ae4d0a3013b83ae9bdf0b3b91291748c9d96.zip | |
Enable tracing without single stepping
Diffstat (limited to 'src/focaccia/lldb_target.py')
| -rw-r--r-- | src/focaccia/lldb_target.py | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/focaccia/lldb_target.py b/src/focaccia/lldb_target.py index f529f9c..283c5bf 100644 --- a/src/focaccia/lldb_target.py +++ b/src/focaccia/lldb_target.py @@ -111,7 +111,6 @@ class LLDBConcreteTarget: if state == lldb.eStateExited: raise RuntimeError('Tried to resume process execution, but the' ' process has already exited.') - assert(state == lldb.eStateStopped) self.process.Continue() def step(self): @@ -122,8 +121,12 @@ class LLDBConcreteTarget: def run_until(self, address: int) -> None: """Continue execution until the address is arrived, ignores other breakpoints""" bp = self.target.BreakpointCreateByAddress(address) - while self.read_register("pc") != address: + while True: self.run() + if self.is_exited(): + return + if self.read_register('pc') == address: + break self.target.BreakpointDelete(bp.GetID()) def record_snapshot(self) -> ProgramState: @@ -241,7 +244,7 @@ class LLDBConcreteTarget: f'[In LLDBConcreteTarget.write_register]: Unable to set' f' {regname} to value {hex(value)}!') - def read_memory(self, addr, size): + def read_memory(self, addr: int, size: int) -> bytes: """Read bytes from memory. :raise ConcreteMemoryError: If unable to read `size` bytes from `addr`. @@ -256,7 +259,7 @@ class LLDBConcreteTarget: else: return bytes(reversed(content)) - def write_memory(self, addr, value: bytes): + def write_memory(self, addr: int, value: bytes): """Write bytes to memory. :raise ConcreteMemoryError: If unable to write at `addr`. |