diff options
| author | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-10-23 10:37:38 +0000 |
|---|---|---|
| committer | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-10-30 17:22:38 +0000 |
| commit | 59dce2af159f652a2adf7d6a2e21f20c7273b221 (patch) | |
| tree | b47253857bd0816e66f665b358476f06822243bf | |
| parent | 02c5f982aeb8173e591ef12c38bf2de0ee01e444 (diff) | |
| download | focaccia-59dce2af159f652a2adf7d6a2e21f20c7273b221.tar.gz focaccia-59dce2af159f652a2adf7d6a2e21f20c7273b221.zip | |
Update LLDB target to include retry lists for some register names (useful because GDB stubs differ in how they expose the same register)
| -rw-r--r-- | src/focaccia/lldb_target.py | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/focaccia/lldb_target.py b/src/focaccia/lldb_target.py index b0d7dd6..2edc2cc 100644 --- a/src/focaccia/lldb_target.py +++ b/src/focaccia/lldb_target.py @@ -44,6 +44,13 @@ class LLDBConcreteTarget: x86.archname: x86.decompose_rflags, } + register_retries = { + aarch64.archname: {}, + x86.archname: { + "rflags": ["eflags"] + } + } + def __init__(self, debugger: lldb.SBDebugger, target: lldb.SBTarget, @@ -146,11 +153,17 @@ class LLDBConcreteTarget: can be found. """ frame = self.process.GetThreadAtIndex(0).GetFrameAtIndex(0) - reg = frame.FindRegister(regname) + + retry_list = self.register_retries[self.archname].get(regname, []) + error_msg = f'[In LLDBConcreteTarget._get_register]: Register {regname} not found' + + reg = None + for name in [regname, *retry_list]: + reg = frame.FindRegister(name) + if reg.IsValid(): + break if not reg.IsValid(): - raise ConcreteRegisterError( - f'[In LLDBConcreteTarget._get_register]: Register {regname}' - f' not found.') + raise ConcreteRegisterError(error_msg) return reg def read_flags(self) -> dict[str, int | bool]: |