angr.analyses.decompiler.optimization_passes.const_prop_reverter

class angr.analyses.decompiler.optimization_passes.const_prop_reverter.BlockWalker

Bases: AILBlockViewer

__init__(walked_objs)
Parameters:

walked_objs (dict[type, set[SideEffectStatement | Assignment | Return | Store]])

class angr.analyses.decompiler.optimization_passes.const_prop_reverter.ConstPropOptReverter

Bases: OptimizationPass

This optimization reverts the effects of constant propagation done by the compiler as discussed in the USENIX 2024 paper SAILR. This optimization’s main goal is to enable later optimizations that rely on symbolic variables to be more effective. This optimization pass will convert two statements with a difference of a const and a symbolic variable into two statements with the symbolic variables.

As an example: x = 75 puts(x) puts(75)

will be converted to: x = 75 puts(x) puts(x)

ARCHES = None
PLATFORMS = None
STRUCTURING: list[str] | None = ['sailr', 'dream']
STAGE: OptimizationPassStage = 10
NAME = 'Revert Constant Propagation Optimizations'
DESCRIPTION = "This optimization reverts the effects of constant propagation done by the compiler as discussed in the\n    USENIX 2024 paper SAILR. This optimization's main goal is to enable later optimizations that rely on\n    symbolic variables to be more effective. This optimization pass will convert two statements with a difference of\n    a const and a symbolic variable into two statements with the symbolic variables.\n\n    As an example:\n    x = 75\n    puts(x)\n    puts(75)\n\n    will be converted to:\n    x = 75\n    puts(x)\n    puts(x)"
__init__(*args, region_identifier=None, reaching_definitions=None, **kwargs)
static find_conflicting_call_args(call0, call1)
Parameters: