Skip to content

Commit cbd77bc

Browse files
erdnaxeyhql
authored andcommitted
Add only_when_registers trace option
1 parent a549371 commit cbd77bc

1 file changed

Lines changed: 12 additions & 7 deletions

File tree

rainbow/rainbow.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,22 @@ class Print(Flag):
4444
class TraceConfig:
4545
"""Tracing configuration."""
4646

47-
def __init__(self,
48-
mem_address: Optional[LeakageModel] = None,
49-
mem_value: Optional[LeakageModel] = None,
50-
register: Optional[LeakageModel] = None,
51-
instruction: bool = False,
52-
ignored_registers: Optional[Set[str]] = None):
47+
def __init__(
48+
self,
49+
mem_address: Optional[LeakageModel] = None,
50+
mem_value: Optional[LeakageModel] = None,
51+
register: Optional[LeakageModel] = None,
52+
instruction: bool = False,
53+
ignored_registers: Optional[Set[str]] = None,
54+
only_when_registers: bool = True,
55+
):
5356
self.mem_address = mem_address
5457
self.mem_value = mem_value
5558
self.register = register
5659
self.instructions = instruction
5760
self.ignored_registers = ignored_registers
61+
# When true, only output register leakage when at least one register is written
62+
self.only_when_registers = only_when_registers
5863

5964

6065
class Rainbow(abc.ABC):
@@ -554,7 +559,7 @@ def _code_hook(self, uci, address, size, _):
554559
# - last_reg_values are register values as they were before the previous instruction
555560
#
556561
# So we need to go over last_regs, get their prev values from last_reg_values and get their current values.
557-
if self.last_regs:
562+
if self.last_regs or not self.trace_config.only_when_registers:
558563
reg_values = {r: uci.reg_read(self.REGS[r]) for r in self.last_regs}
559564
leak = sum(
560565
self.trace_config.register(reg_values[r], self.last_reg_values.get(r, 0)) for r in self.last_regs)

0 commit comments

Comments
 (0)