angr.rust.optimization_passes.str_argument_simplifier

class angr.rust.optimization_passes.str_argument_simplifier.StrArgumentSimplifier

Bases: OptimizationPass, SRDAMixin

Simplify string literals used as function call arguments in Rust binaries.

ARCHES = None
PLATFORMS = None
STAGE: OptimizationPassStage = 8
NAME = 'Simplify string literals used as function call arguments'
__init__(func, manager, **kwargs)
try_str_literal(arg0, arg1)
try_str_reference(arg0, arg1)

Try to identify a &str reference from two arguments. For example, given the following call: Call (

target: 0x4696a0<64>, prototype: …, args: [

(Reference vvar_400{stack -848}), Load(addr=(Reference vvar_300{combo_reg (16, 32)}), size=8, endness=Iend_LE), Load(addr=((Reference vvar_300{combo_reg (16, 32)}) + 0x8<64>), size=8, endness=Iend_LE), Load(addr=(Reference vvar_307{combo_reg (16, 32)}), size=8, endness=Iend_LE), Load(addr=((Reference vvar_307{combo_reg (16, 32)}) + 0x8<64>), size=8, endness=Iend_LE)

]

) We can identify that the second and third arguments form a &str reference.

replace_call(call, _block, _stmt)
Parameters: