diff options
| -rw-r--r-- | src/focaccia/native/tracer.py | 4 | ||||
| -rw-r--r-- | src/focaccia/parser.py | 1 | ||||
| -rw-r--r-- | src/focaccia/trace.py | 7 |
3 files changed, 9 insertions, 3 deletions
diff --git a/src/focaccia/native/tracer.py b/src/focaccia/native/tracer.py index b51de9f..eed5206 100644 --- a/src/focaccia/native/tracer.py +++ b/src/focaccia/native/tracer.py @@ -8,7 +8,7 @@ import logging from pathlib import Path from focaccia.utils import timebound, TimeoutError -from focaccia.trace import Trace, TraceEnvironment +from focaccia.trace import Trace, TraceContainer, TraceEnvironment from focaccia.miasm_util import MiasmSymbolResolver from focaccia.snapshot import ReadableProgramState, RegisterAccessError from focaccia.symbolic import SymbolicTransform, DisassemblyContext, run_instruction @@ -318,5 +318,5 @@ class SymbolicTracer: debug(f'Completed handling event: {post_event}') - return Trace(strace, self.env) + return TraceContainer(strace, self.env) diff --git a/src/focaccia/parser.py b/src/focaccia/parser.py index 60bf2af..4df14ec 100644 --- a/src/focaccia/parser.py +++ b/src/focaccia/parser.py @@ -35,6 +35,7 @@ def serialize_transformations(transforms: Trace[SymbolicTransform], """Serialize symbolic transformations to a text stream.""" data = json.dumps({ 'env': transforms.env.to_json(), + 'addrs': transforms.addresses, 'states': [t.to_json() for t in transforms], }, option=json.OPT_INDENT_2).decode() out_stream.write(data) diff --git a/src/focaccia/trace.py b/src/focaccia/trace.py index ffae8d5..6042108 100644 --- a/src/focaccia/trace.py +++ b/src/focaccia/trace.py @@ -69,9 +69,11 @@ class TraceEnvironment: class Trace(Generic[T]): def __init__(self, states: Iterable[T], + addresses: list[int], env: TraceEnvironment): self.env = env self._iter = states + self.addresses = addresses def __iter__(self): return iter(self._iter) @@ -81,7 +83,10 @@ class TraceContainer(Trace[T]): states: list[T], env: TraceEnvironment): self._state_list = states - super().__init__(iter(states), env) + addr_list = [] + for t in self._state_list: + addr_list.append(t.addr) + super().__init__(iter(states), addr_list, env) def __len__(self) -> int: return len(self._state_list) |