about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorTheofilos Augoustis <theofilos.augoustis@gmail.com>2025-10-24 12:37:16 +0000
committerTheofilos Augoustis <theofilos.augoustis@gmail.com>2025-10-30 17:22:38 +0000
commit1715702fedfe30e00aacefd056b9439ce758cc16 (patch)
tree7d8ef20357a3f6b1cd416d70e60d7e5f4840c6be
parentfd487a87ece3c3755fe68e95c4f002d199523406 (diff)
downloadfocaccia-1715702fedfe30e00aacefd056b9439ce758cc16.tar.gz
focaccia-1715702fedfe30e00aacefd056b9439ce758cc16.zip
Update LLDB target to support multiple threads
-rw-r--r--src/focaccia/lldb_target.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/focaccia/lldb_target.py b/src/focaccia/lldb_target.py
index 2edc2cc..f529f9c 100644
--- a/src/focaccia/lldb_target.py
+++ b/src/focaccia/lldb_target.py
@@ -1,10 +1,16 @@
 import os
+import logging
 
 import lldb
 
 from .arch import supported_architectures
 from .snapshot import ProgramState
 
+logger = logging.getLogger('focaccia-lldb-target')
+debug = logger.debug
+info = logger.info
+warn = logger.warn
+
 class MemoryMap:
     """Description of a range of mapped memory.
 
@@ -110,7 +116,7 @@ class LLDBConcreteTarget:
 
     def step(self):
         """Step forward by a single instruction."""
-        thread: lldb.SBThread = self.process.GetThreadAtIndex(0)
+        thread: lldb.SBThread = self.process.GetSelectedThread()
         thread.StepInstruction(False)
 
     def run_until(self, address: int) -> None:
@@ -152,7 +158,9 @@ class LLDBConcreteTarget:
         :raise ConcreteRegisterError: If no register with the specified name
                                       can be found.
         """
-        frame = self.process.GetThreadAtIndex(0).GetFrameAtIndex(0)
+        debug(f'Accessing register {regname}')
+
+        frame = self.process.GetSelectedThread().GetFrameAtIndex(0)
 
         retry_list = self.register_retries[self.archname].get(regname, [])
         error_msg = f'[In LLDBConcreteTarget._get_register]: Register {regname} not found'
@@ -344,6 +352,10 @@ class LLDBConcreteTarget:
         inst = self.target.ReadInstructions(lldb.SBAddress(addr, self.target), 1, 'intel')[0]
         return inst.GetByteSize()
 
+    def get_current_tid(self) -> int:
+        thread: lldb.SBThread = self.process.GetSelectedThread()
+        return thread.GetThreadID()
+
 class LLDBLocalTarget(LLDBConcreteTarget):
     def __init__(self,
                  executable: str,