diff options
| author | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-10-24 12:37:16 +0000 |
|---|---|---|
| committer | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-10-30 17:22:38 +0000 |
| commit | 1715702fedfe30e00aacefd056b9439ce758cc16 (patch) | |
| tree | 7d8ef20357a3f6b1cd416d70e60d7e5f4840c6be | |
| parent | fd487a87ece3c3755fe68e95c4f002d199523406 (diff) | |
| download | focaccia-1715702fedfe30e00aacefd056b9439ce758cc16.tar.gz focaccia-1715702fedfe30e00aacefd056b9439ce758cc16.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, |