diff options
| -rw-r--r-- | src/focaccia/lldb_target.py | 6 | ||||
| -rw-r--r-- | src/focaccia/symbolic.py | 14 |
2 files changed, 9 insertions, 11 deletions
diff --git a/src/focaccia/lldb_target.py b/src/focaccia/lldb_target.py index 283c5bf..940b3d9 100644 --- a/src/focaccia/lldb_target.py +++ b/src/focaccia/lldb_target.py @@ -91,7 +91,7 @@ class LLDBConcreteTarget: return archname def determine_name(self) -> str: - return self.process.GetProcessInfo().GetName() + return self.process.GetTarget().GetExecutable().fullpath def determine_arguments(self): launch_info = self.target.GetLaunchInfo() @@ -395,7 +395,7 @@ class LLDBLocalTarget(LLDBConcreteTarget): super().__init__(debugger, target, process) class LLDBRemoteTarget(LLDBConcreteTarget): - def __init__(self, remote: str): + def __init__(self, remote: str, executable: str | None = None): """Construct an LLDB remote target. Stop at entry. :param remote: String of the form <remote_name>:<port> (e.g. localhost:12345). @@ -403,7 +403,7 @@ class LLDBRemoteTarget(LLDBConcreteTarget): """ debugger = lldb.SBDebugger.Create() debugger.SetAsync(False) - target = debugger.CreateTarget(None) + target = debugger.CreateTarget(executable) # Set up objects for process execution error = lldb.SBError() diff --git a/src/focaccia/symbolic.py b/src/focaccia/symbolic.py index cb32915..058efe8 100644 --- a/src/focaccia/symbolic.py +++ b/src/focaccia/symbolic.py @@ -1,8 +1,11 @@ """Tools and utilities for execution with Miasm.""" from __future__ import annotations -import logging + import sys +import logging + +from pathlib import Path from miasm.analysis.machine import Machine from miasm.core.cpu import instruction as miasm_instr @@ -733,18 +736,13 @@ class SymbolicTracer: return LLDBLocalTarget(binary, self.env.argv, self.env.envp) debug(f'Connecting to remote debug target {self.remote}') - target = LLDBRemoteTarget(self.remote) + target = LLDBRemoteTarget(self.remote, binary) module_name = target.determine_name() - if binary is None: - binary, self.env.binary_name = module_name, module_name + binary = str(Path(self.env.binary_name).resolve()) if binary != module_name: warn(f'Discovered binary name {module_name} differs from specified name {binary}') - binary_args = target.determine_arguments() - if binary_args != self.env.argv: - warn(f'Discovered program arguments {binary_args} differ from those specified {self.env.argv}') - return target def predict_next_state(self, instruction: Instruction, transform: SymbolicTransform): |