angr.analyses.decompiler.peephole_optimizations.cas_intrinsics¶
- class angr.analyses.decompiler.peephole_optimizations.cas_intrinsics.CASIntrinsics¶
Bases:
PeepholeOptimizationMultiStmtBaseRewrite 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'>))¶