about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/focaccia/native/tracer.py4
-rw-r--r--src/focaccia/parser.py1
-rw-r--r--src/focaccia/trace.py7
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)