about summary refs log tree commit diff stats
path: root/src/focaccia/lldb_target.py
diff options
context:
space:
mode:
authorTheofilos Augoustis <theofilos.augoustis@gmail.com>2025-10-24 15:28:15 +0000
committerTheofilos Augoustis <theofilos.augoustis@gmail.com>2025-11-06 17:20:13 +0000
commitae65ae4d0a3013b83ae9bdf0b3b91291748c9d96 (patch)
treef0115bcf775f68cc07157db1ec11180a4f678789 /src/focaccia/lldb_target.py
parentaba970d960a4842bbd899f557c8e0229ec20ad0c (diff)
downloadfocaccia-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.py11
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`.