angr.analyses.decompiler.peephole_optimizations.cas_intrinsics

class angr.analyses.decompiler.peephole_optimizations.cas_intrinsics.CASIntrinsics

Bases: PeepholeOptimizationMultiStmtBase

Rewrite lock-prefixed instructions (or rather, their VEX/AIL forms) into intrinsic calls.

Case 1:

             mov eax, r12d
0x140014b57: xchg eax, [0x14000365f8]

LABEL_0x140014b57:
CAS(0x1400365f8<64>, Conv(64->32, vvar_365{reg 112}), Load(addr=0x1400365f8<64>, size=4, endness=Iend_LE),
    vvar_27756)
if (CasCmpNE(vvar_27756, g_1400365f8))
    goto LABEL_0x140014b57;

=> vvar_27756 = _InterlockedExchange(0x1400365f8, vvar_365{reg 112})

Case 2:

lock cmpxchg cs:g_WarbirdSecureFunctionsLock, r14d

CAS(0x1400365f8<64>, 0x1<32>, 0x0<32>, vvar_27751)

=> var_27751 = _InterlockedCompareExchange(0x1400365f8, 0x1<32>, 0x0<32>)
NAME = 'Rewrite compare-and-swap instructions into intrinsics.'
stmt_classes = ((<class 'angr.ailment.statement.CAS'>, <class 'angr.ailment.statement.ConditionalJump'>), (<class 'angr.ailment.statement.CAS'>, <class 'angr.ailment.statement.Statement'>))
optimize(stmts, stmt_idx=None, block=None, **kwargs)
Parameters: