@@ -44,17 +44,22 @@ class Print(Flag):
4444class 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
6065class 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