diff options
| author | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-10-23 10:37:38 +0000 |
|---|---|---|
| committer | Theofilos Augoustis <theofilos.augoustis@gmail.com> | 2025-11-06 17:20:13 +0000 |
| commit | e3679a8e54c00579b62180ac57b612c5ad8a30eb (patch) | |
| tree | 95d30c62cde6256590b50aeeac75a734050ca7d2 | |
| parent | 438c12d725b9f35d7d2008e2ef51294a514f2876 (diff) | |
| download | focaccia-e3679a8e54c00579b62180ac57b612c5ad8a30eb.tar.gz focaccia-e3679a8e54c00579b62180ac57b612c5ad8a30eb.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]: |