angr.rust.optimization_passes.str_argument_simplifier¶
- class angr.rust.optimization_passes.str_argument_simplifier.StrArgumentSimplifier¶
Bases:
OptimizationPass,SRDAMixinSimplify 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.