diff options
| author | Brian Potchik <brian@vector35.com> | 2024-03-02 14:38:47 -0500 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2024-03-02 14:38:47 -0500 |
| commit | 2e3b9c925390cc8b1d72a41d0564bb2862d3dba2 (patch) | |
| tree | f40495cd494b8c157a0298259019873a624dc7e2 /python/mediumlevelil.py | |
| parent | ff2aa7435c3847f6969364f5d04d0943918429be (diff) | |
Add support for memory intrinsics.
Diffstat (limited to 'python/mediumlevelil.py')
| -rw-r--r-- | python/mediumlevelil.py | 67 |
1 files changed, 65 insertions, 2 deletions
diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py index 05eeb449..53f87cdc 100644 --- a/python/mediumlevelil.py +++ b/python/mediumlevelil.py @@ -263,6 +263,10 @@ class MediumLevelILInstruction(BaseILInstruction): ("output", "var_list"), ("intrinsic", "intrinsic"), ("params", "expr_list") ], MediumLevelILOperation.MLIL_INTRINSIC_SSA: [ ("output", "var_ssa_list"), ("intrinsic", "intrinsic"), ("params", "expr_list") + ], MediumLevelILOperation.MLIL_MEMORY_INTRINSIC_OUTPUT_SSA: [ + ("dest_memory", "int"), ("output", "var_ssa_list") + ], MediumLevelILOperation.MLIL_MEMORY_INTRINSIC_SSA: [ + ("output", "expr"), ("intrinsic", "intrinsic"), ("params", "expr_list"), ("src_memory", "int") ], MediumLevelILOperation.MLIL_FREE_VAR_SLOT: [ ("dest", "var") ], MediumLevelILOperation.MLIL_FREE_VAR_SLOT_SSA: [ @@ -2222,6 +2226,64 @@ class MediumLevelILIntrinsicSsa(MediumLevelILInstruction, SSA): @dataclass(frozen=True, repr=False, eq=False) +class MediumLevelILMemoryIntrinsicOutputSsa(MediumLevelILInstruction, SSA): + def __repr__(self): + return f"<MediumLevelILMemoryIntrinsicOutputSsa: {self.dest_memory} {self.output}>" + + @property + def dest_memory(self) -> int: + return self._get_int(0) + + @property + def output(self) -> List[SSAVariable]: + return self._get_var_ssa_list(1, 2) + + @property + def detailed_operands(self) -> List[Tuple[str, MediumLevelILOperandType, str]]: + return [ + ("dest_memory", self.dest_memory, "int"), + ("output", self.output, "List[SSAVariable]"), + ] + + +@dataclass(frozen=True, repr=False, eq=False) +class MediumLevelILMemoryIntrinsicSsa(MediumLevelILInstruction, SSA): + @property + def output(self) -> List[SSAVariable]: + inst = self._get_expr(0) + assert isinstance(inst, MediumLevelILMemoryIntrinsicOutputSsa), "MediumLevelILMemoryIntrinsicSsa expected MediumLevelILMemoryIntrinsicOutputSsa as first operand" + return inst.output + + @property + def dest_memory(self) -> int: + inst = self._get_expr(0) + assert isinstance(inst, MediumLevelILMemoryIntrinsicOutputSsa), "MediumLevelILMemoryIntrinsicSsa expected MediumLevelILMemoryIntrinsicOutputSsa as first operand" + return inst.dest_memory + + @property + def intrinsic(self) -> 'lowlevelil.ILIntrinsic': + return self._get_intrinsic(1) + + @property + def params(self) -> List[MediumLevelILInstruction]: + return self._get_expr_list(2, 3) + + @property + def src_memory(self) -> int: + return self._get_int(4) + + @property + def detailed_operands(self) -> List[Tuple[str, MediumLevelILOperandType, str]]: + return [ + ("output", self.output, "List[SSAVariable]"), + ("dest_memory", self.dest_memory, "int"), + ("intrinsic", self.intrinsic, "ILIntrinsic"), + ("params", self.params, "List[MediumLevelILInstruction]"), + ("src_memory", self.src_memory, "int"), + ] + + +@dataclass(frozen=True, repr=False, eq=False) class MediumLevelILSetVarSsaField(MediumLevelILInstruction, SetVar, SSA): @property def dest(self) -> SSAVariable: @@ -2996,8 +3058,9 @@ ILInstruction = { MediumLevelILTailcall, # [("output", "var_list"), ("dest", "expr"), ("params", "expr_list")], MediumLevelILOperation.MLIL_INTRINSIC: MediumLevelILIntrinsic, # [("output", "var_list"), ("intrinsic", "intrinsic"), ("params", "expr_list")], - MediumLevelILOperation.MLIL_INTRINSIC_SSA: - MediumLevelILIntrinsicSsa, # [("output", "var_ssa_list"), ("intrinsic", "intrinsic"), ("params", "expr_list")], + MediumLevelILOperation.MLIL_INTRINSIC_SSA: MediumLevelILIntrinsicSsa, # [("output", "var_ssa_list"), ("intrinsic", "intrinsic"), ("params", "expr_list")], + MediumLevelILOperation.MLIL_MEMORY_INTRINSIC_OUTPUT_SSA: MediumLevelILMemoryIntrinsicOutputSsa, # [("dest_memory", "int"), ("output", "var_ssa_list")], + MediumLevelILOperation.MLIL_MEMORY_INTRINSIC_SSA: MediumLevelILMemoryIntrinsicSsa, # [("output", "expr"), ("intrinsic", "intrinsic"), ("params", "expr_list"), ("src_memory", "int")], MediumLevelILOperation.MLIL_SET_VAR_SSA_FIELD: MediumLevelILSetVarSsaField, # [("prev", "var_ssa_dest_and_src"), ("offset", "int"), ("src", "expr")], MediumLevelILOperation.MLIL_SET_VAR_SPLIT_SSA: |
