about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-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,