diff options
| author | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-10-24 12:37:16 +0000 |
|---|---|---|
| committer | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-11-06 17:20:13 +0000 |
| commit | b1b57bb87543654483f246917b2e085e655a1679 (patch) | |
| tree | 98b667bfdeb3b3e16e440d69193e9b4a5d341ae6 | |
| parent | 99b5b005ab43b57cf97b86ad2d06479f5c3e06c2 (diff) | |
| download | focaccia-b1b57bb87543654483f246917b2e085e655a1679.tar.gz focaccia-b1b57bb87543654483f246917b2e085e655a1679.zip | |
Update LLDB target to support multiple threads
| -rw-r--r-- | src/focaccia/lldb_target.py | 16 |
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, |