diff options
| author | KyleMiles <krm504@nyu.edu> | 2022-01-27 22:43:28 -0500 |
|---|---|---|
| committer | KyleMiles <krm504@nyu.edu> | 2022-01-28 00:24:06 -0500 |
| commit | 6812c973c9fa9b4ad642ab81856c05f87bd6fcc4 (patch) | |
| tree | dace4156d03148bcaf02df138ab4e0d93e61bc6f /mediumlevelilinstruction.cpp | |
| parent | 519c9db22367f2659d1a54599fab47e6313be06e (diff) | |
Format All Files
Diffstat (limited to 'mediumlevelilinstruction.cpp')
| -rw-r--r-- | mediumlevelilinstruction.cpp | 1085 |
1 files changed, 508 insertions, 577 deletions
diff --git a/mediumlevelilinstruction.cpp b/mediumlevelilinstruction.cpp index 7235687b..29a58de7 100644 --- a/mediumlevelilinstruction.cpp +++ b/mediumlevelilinstruction.cpp @@ -19,14 +19,14 @@ // IN THE SOFTWARE. #ifdef BINARYNINJACORE_LIBRARY -#include "mediumlevelilfunction.h" -#include "mediumlevelilssafunction.h" -#include "lowlevelilfunction.h" + #include "mediumlevelilfunction.h" + #include "mediumlevelilssafunction.h" + #include "lowlevelilfunction.h" using namespace BinaryNinjaCore; #else -#include "binaryninjaapi.h" -#include "mediumlevelilinstruction.h" -#include "lowlevelilinstruction.h" + #include "binaryninjaapi.h" + #include "mediumlevelilinstruction.h" + #include "lowlevelilinstruction.h" using namespace BinaryNinja; #endif @@ -35,219 +35,208 @@ using namespace std; #endif -unordered_map<MediumLevelILOperandUsage, MediumLevelILOperandType> - MediumLevelILInstructionBase::operandTypeForUsage = { - {SourceExprMediumLevelOperandUsage, ExprMediumLevelOperand}, - {SourceVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, - {SourceSSAVariableMediumLevelOperandUsage, SSAVariableMediumLevelOperand}, - {PartialSSAVariableSourceMediumLevelOperandUsage, SSAVariableMediumLevelOperand}, - {DestExprMediumLevelOperandUsage, ExprMediumLevelOperand}, - {DestVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, - {DestSSAVariableMediumLevelOperandUsage, SSAVariableMediumLevelOperand}, - {LeftExprMediumLevelOperandUsage, ExprMediumLevelOperand}, - {RightExprMediumLevelOperandUsage, ExprMediumLevelOperand}, - {CarryExprMediumLevelOperandUsage, ExprMediumLevelOperand}, - {StackExprMediumLevelOperandUsage, ExprMediumLevelOperand}, - {ConditionExprMediumLevelOperandUsage, ExprMediumLevelOperand}, - {HighVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, - {LowVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, - {HighSSAVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, - {LowSSAVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, - {OffsetMediumLevelOperandUsage, IntegerMediumLevelOperand}, - {ConstantMediumLevelOperandUsage, IntegerMediumLevelOperand}, - {VectorMediumLevelOperandUsage, IntegerMediumLevelOperand}, - {IntrinsicMediumLevelOperandUsage, IntrinsicMediumLevelOperand}, - {TargetMediumLevelOperandUsage, IndexMediumLevelOperand}, - {TrueTargetMediumLevelOperandUsage, IndexMediumLevelOperand}, - {FalseTargetMediumLevelOperandUsage, IndexMediumLevelOperand}, - {DestMemoryVersionMediumLevelOperandUsage, IndexMediumLevelOperand}, - {SourceMemoryVersionMediumLevelOperandUsage, IndexMediumLevelOperand}, - {TargetsMediumLevelOperandUsage, IndexMapMediumLevelOperand}, - {SourceMemoryVersionsMediumLevelOperandUsage, IndexListMediumLevelOperand}, - {OutputVariablesMediumLevelOperandUsage, VariableListMediumLevelOperand}, - {OutputVariablesSubExprMediumLevelOperandUsage, VariableListMediumLevelOperand}, - {OutputSSAVariablesMediumLevelOperandUsage, SSAVariableListMediumLevelOperand}, - {OutputSSAVariablesSubExprMediumLevelOperandUsage, SSAVariableListMediumLevelOperand}, - {OutputSSAMemoryVersionMediumLevelOperandUsage, IndexMediumLevelOperand}, - {ParameterExprsMediumLevelOperandUsage, ExprListMediumLevelOperand}, - {SourceExprsMediumLevelOperandUsage, ExprListMediumLevelOperand}, - {ParameterVariablesMediumLevelOperandUsage, VariableListMediumLevelOperand}, - {ParameterSSAVariablesMediumLevelOperandUsage, SSAVariableListMediumLevelOperand}, - {ParameterSSAMemoryVersionMediumLevelOperandUsage, IndexMediumLevelOperand}, - {SourceSSAVariablesMediumLevelOperandUsages, SSAVariableListMediumLevelOperand} - }; +unordered_map<MediumLevelILOperandUsage, MediumLevelILOperandType> MediumLevelILInstructionBase::operandTypeForUsage = { + {SourceExprMediumLevelOperandUsage, ExprMediumLevelOperand}, + {SourceVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, + {SourceSSAVariableMediumLevelOperandUsage, SSAVariableMediumLevelOperand}, + {PartialSSAVariableSourceMediumLevelOperandUsage, SSAVariableMediumLevelOperand}, + {DestExprMediumLevelOperandUsage, ExprMediumLevelOperand}, + {DestVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, + {DestSSAVariableMediumLevelOperandUsage, SSAVariableMediumLevelOperand}, + {LeftExprMediumLevelOperandUsage, ExprMediumLevelOperand}, + {RightExprMediumLevelOperandUsage, ExprMediumLevelOperand}, + {CarryExprMediumLevelOperandUsage, ExprMediumLevelOperand}, + {StackExprMediumLevelOperandUsage, ExprMediumLevelOperand}, + {ConditionExprMediumLevelOperandUsage, ExprMediumLevelOperand}, + {HighVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, + {LowVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, + {HighSSAVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, + {LowSSAVariableMediumLevelOperandUsage, VariableMediumLevelOperand}, + {OffsetMediumLevelOperandUsage, IntegerMediumLevelOperand}, + {ConstantMediumLevelOperandUsage, IntegerMediumLevelOperand}, + {VectorMediumLevelOperandUsage, IntegerMediumLevelOperand}, + {IntrinsicMediumLevelOperandUsage, IntrinsicMediumLevelOperand}, + {TargetMediumLevelOperandUsage, IndexMediumLevelOperand}, + {TrueTargetMediumLevelOperandUsage, IndexMediumLevelOperand}, + {FalseTargetMediumLevelOperandUsage, IndexMediumLevelOperand}, + {DestMemoryVersionMediumLevelOperandUsage, IndexMediumLevelOperand}, + {SourceMemoryVersionMediumLevelOperandUsage, IndexMediumLevelOperand}, + {TargetsMediumLevelOperandUsage, IndexMapMediumLevelOperand}, + {SourceMemoryVersionsMediumLevelOperandUsage, IndexListMediumLevelOperand}, + {OutputVariablesMediumLevelOperandUsage, VariableListMediumLevelOperand}, + {OutputVariablesSubExprMediumLevelOperandUsage, VariableListMediumLevelOperand}, + {OutputSSAVariablesMediumLevelOperandUsage, SSAVariableListMediumLevelOperand}, + {OutputSSAVariablesSubExprMediumLevelOperandUsage, SSAVariableListMediumLevelOperand}, + {OutputSSAMemoryVersionMediumLevelOperandUsage, IndexMediumLevelOperand}, + {ParameterExprsMediumLevelOperandUsage, ExprListMediumLevelOperand}, + {SourceExprsMediumLevelOperandUsage, ExprListMediumLevelOperand}, + {ParameterVariablesMediumLevelOperandUsage, VariableListMediumLevelOperand}, + {ParameterSSAVariablesMediumLevelOperandUsage, SSAVariableListMediumLevelOperand}, + {ParameterSSAMemoryVersionMediumLevelOperandUsage, IndexMediumLevelOperand}, + {SourceSSAVariablesMediumLevelOperandUsages, SSAVariableListMediumLevelOperand}}; unordered_map<BNMediumLevelILOperation, vector<MediumLevelILOperandUsage>> - MediumLevelILInstructionBase::operationOperandUsage = { - {MLIL_NOP, {}}, - {MLIL_NORET, {}}, - {MLIL_BP, {}}, - {MLIL_UNDEF, {}}, - {MLIL_UNIMPL, {}}, - {MLIL_SET_VAR, {DestVariableMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, - {MLIL_SET_VAR_FIELD, {DestVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage, - SourceExprMediumLevelOperandUsage}}, - {MLIL_SET_VAR_SPLIT, {HighVariableMediumLevelOperandUsage, LowVariableMediumLevelOperandUsage, - SourceExprMediumLevelOperandUsage}}, - {MLIL_SET_VAR_SSA, {DestSSAVariableMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, - {MLIL_SET_VAR_SSA_FIELD, {DestSSAVariableMediumLevelOperandUsage, PartialSSAVariableSourceMediumLevelOperandUsage, - OffsetMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, - {MLIL_SET_VAR_SPLIT_SSA, {HighSSAVariableMediumLevelOperandUsage, LowSSAVariableMediumLevelOperandUsage, - SourceExprMediumLevelOperandUsage}}, - {MLIL_SET_VAR_ALIASED, {DestSSAVariableMediumLevelOperandUsage, PartialSSAVariableSourceMediumLevelOperandUsage, - SourceExprMediumLevelOperandUsage}}, - {MLIL_SET_VAR_ALIASED_FIELD, {DestSSAVariableMediumLevelOperandUsage, PartialSSAVariableSourceMediumLevelOperandUsage, - OffsetMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, - {MLIL_LOAD, {SourceExprMediumLevelOperandUsage}}, - {MLIL_LOAD_STRUCT, {SourceExprMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, - {MLIL_LOAD_SSA, {SourceExprMediumLevelOperandUsage, SourceMemoryVersionMediumLevelOperandUsage}}, - {MLIL_LOAD_STRUCT_SSA, {SourceExprMediumLevelOperandUsage, OffsetMediumLevelOperandUsage, - SourceMemoryVersionMediumLevelOperandUsage}}, - {MLIL_STORE, {DestExprMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, - {MLIL_STORE_STRUCT, {DestExprMediumLevelOperandUsage, OffsetMediumLevelOperandUsage, - SourceExprMediumLevelOperandUsage}}, - {MLIL_STORE_SSA, {DestExprMediumLevelOperandUsage, DestMemoryVersionMediumLevelOperandUsage, - SourceMemoryVersionMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, - {MLIL_STORE_STRUCT_SSA, {DestExprMediumLevelOperandUsage, OffsetMediumLevelOperandUsage, - DestMemoryVersionMediumLevelOperandUsage, SourceMemoryVersionMediumLevelOperandUsage, - SourceExprMediumLevelOperandUsage}}, - {MLIL_VAR, {SourceVariableMediumLevelOperandUsage}}, - {MLIL_VAR_FIELD, {SourceVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, - {MLIL_VAR_SPLIT, {HighVariableMediumLevelOperandUsage, LowVariableMediumLevelOperandUsage}}, - {MLIL_VAR_SSA, {SourceSSAVariableMediumLevelOperandUsage}}, - {MLIL_VAR_SSA_FIELD, {SourceSSAVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, - {MLIL_VAR_ALIASED, {SourceSSAVariableMediumLevelOperandUsage}}, - {MLIL_VAR_ALIASED_FIELD, {SourceSSAVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, - {MLIL_VAR_SPLIT_SSA, {HighSSAVariableMediumLevelOperandUsage, LowSSAVariableMediumLevelOperandUsage}}, - {MLIL_ADDRESS_OF, {SourceVariableMediumLevelOperandUsage}}, - {MLIL_ADDRESS_OF_FIELD, {SourceVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, - {MLIL_JUMP, {DestExprMediumLevelOperandUsage}}, - {MLIL_JUMP_TO, {DestExprMediumLevelOperandUsage, TargetsMediumLevelOperandUsage}}, - {MLIL_RET_HINT, {DestExprMediumLevelOperandUsage}}, - {MLIL_CALL, {OutputVariablesMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, - ParameterExprsMediumLevelOperandUsage}}, - {MLIL_CALL_UNTYPED, {OutputVariablesSubExprMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, - ParameterVariablesMediumLevelOperandUsage}}, - {MLIL_SYSCALL, {OutputVariablesMediumLevelOperandUsage, ParameterExprsMediumLevelOperandUsage}}, - {MLIL_SYSCALL_UNTYPED, {OutputVariablesSubExprMediumLevelOperandUsage, - ParameterVariablesMediumLevelOperandUsage, StackExprMediumLevelOperandUsage}}, - {MLIL_TAILCALL, {OutputVariablesMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, - ParameterExprsMediumLevelOperandUsage}}, - {MLIL_TAILCALL_UNTYPED, {OutputVariablesSubExprMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, - ParameterVariablesMediumLevelOperandUsage}}, - {MLIL_CALL_SSA, {OutputSSAVariablesSubExprMediumLevelOperandUsage, - OutputSSAMemoryVersionMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, - ParameterExprsMediumLevelOperandUsage, SourceMemoryVersionMediumLevelOperandUsage}}, - {MLIL_CALL_UNTYPED_SSA, {OutputSSAVariablesSubExprMediumLevelOperandUsage, - OutputSSAMemoryVersionMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, - ParameterSSAVariablesMediumLevelOperandUsage, ParameterSSAMemoryVersionMediumLevelOperandUsage, - StackExprMediumLevelOperandUsage}}, - {MLIL_SYSCALL_SSA, {OutputSSAVariablesSubExprMediumLevelOperandUsage, - OutputSSAMemoryVersionMediumLevelOperandUsage, ParameterExprsMediumLevelOperandUsage, - SourceMemoryVersionMediumLevelOperandUsage}}, - {MLIL_SYSCALL_UNTYPED_SSA, {OutputSSAVariablesSubExprMediumLevelOperandUsage, - OutputSSAMemoryVersionMediumLevelOperandUsage, ParameterSSAVariablesMediumLevelOperandUsage, - ParameterSSAMemoryVersionMediumLevelOperandUsage, StackExprMediumLevelOperandUsage}}, - {MLIL_TAILCALL_SSA, {OutputSSAVariablesSubExprMediumLevelOperandUsage, - OutputSSAMemoryVersionMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, - ParameterExprsMediumLevelOperandUsage, SourceMemoryVersionMediumLevelOperandUsage}}, - {MLIL_TAILCALL_UNTYPED_SSA, {OutputSSAVariablesSubExprMediumLevelOperandUsage, - OutputSSAMemoryVersionMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, - ParameterSSAVariablesMediumLevelOperandUsage, ParameterSSAMemoryVersionMediumLevelOperandUsage, - StackExprMediumLevelOperandUsage}}, - {MLIL_RET, {SourceExprsMediumLevelOperandUsage}}, - {MLIL_IF, {ConditionExprMediumLevelOperandUsage, TrueTargetMediumLevelOperandUsage, - FalseTargetMediumLevelOperandUsage}}, - {MLIL_GOTO, {TargetMediumLevelOperandUsage}}, - {MLIL_INTRINSIC, {OutputVariablesMediumLevelOperandUsage, IntrinsicMediumLevelOperandUsage, - ParameterExprsMediumLevelOperandUsage}}, - {MLIL_INTRINSIC_SSA, {OutputSSAVariablesMediumLevelOperandUsage, IntrinsicMediumLevelOperandUsage, - ParameterExprsMediumLevelOperandUsage}}, - {MLIL_FREE_VAR_SLOT, {DestVariableMediumLevelOperandUsage}}, - {MLIL_FREE_VAR_SLOT_SSA, {DestSSAVariableMediumLevelOperandUsage, PartialSSAVariableSourceMediumLevelOperandUsage}}, - {MLIL_TRAP, {VectorMediumLevelOperandUsage}}, - {MLIL_VAR_PHI, {DestSSAVariableMediumLevelOperandUsage, SourceSSAVariablesMediumLevelOperandUsages}}, - {MLIL_MEM_PHI, {DestMemoryVersionMediumLevelOperandUsage, SourceMemoryVersionsMediumLevelOperandUsage}}, - {MLIL_CONST, {ConstantMediumLevelOperandUsage}}, - {MLIL_CONST_PTR, {ConstantMediumLevelOperandUsage}}, - {MLIL_EXTERN_PTR, {ConstantMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, - {MLIL_FLOAT_CONST, {ConstantMediumLevelOperandUsage}}, - {MLIL_IMPORT, {ConstantMediumLevelOperandUsage}}, - {MLIL_ADD, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_SUB, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_AND, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_OR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_XOR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_LSL, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_LSR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_ASR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_ROL, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_ROR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_MUL, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_MULU_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_MULS_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_DIVU, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_DIVS, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_MODU, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_MODS, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_E, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_NE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_SLT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_ULT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_SLE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_ULE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_SGE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_UGE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_SGT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_CMP_UGT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_TEST_BIT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_ADD_OVERFLOW, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_ADC, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage, - CarryExprMediumLevelOperandUsage}}, - {MLIL_SBB, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage, - CarryExprMediumLevelOperandUsage}}, - {MLIL_RLC, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage, - CarryExprMediumLevelOperandUsage}}, - {MLIL_RRC, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage, - CarryExprMediumLevelOperandUsage}}, - {MLIL_DIVU_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_DIVS_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_MODU_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_MODS_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_NEG, {SourceExprMediumLevelOperandUsage}}, - {MLIL_NOT, {SourceExprMediumLevelOperandUsage}}, - {MLIL_SX, {SourceExprMediumLevelOperandUsage}}, - {MLIL_ZX, {SourceExprMediumLevelOperandUsage}}, - {MLIL_LOW_PART, {SourceExprMediumLevelOperandUsage}}, - {MLIL_BOOL_TO_INT, {SourceExprMediumLevelOperandUsage}}, - {MLIL_UNIMPL_MEM, {SourceExprMediumLevelOperandUsage}}, - {MLIL_FADD, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FSUB, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FMUL, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FDIV, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FSQRT, {SourceExprMediumLevelOperandUsage}}, - {MLIL_FNEG, {SourceExprMediumLevelOperandUsage}}, - {MLIL_FABS, {SourceExprMediumLevelOperandUsage}}, - {MLIL_FLOAT_TO_INT, {SourceExprMediumLevelOperandUsage}}, - {MLIL_INT_TO_FLOAT, {SourceExprMediumLevelOperandUsage}}, - {MLIL_FLOAT_CONV, {SourceExprMediumLevelOperandUsage}}, - {MLIL_ROUND_TO_INT, {SourceExprMediumLevelOperandUsage}}, - {MLIL_FLOOR, {SourceExprMediumLevelOperandUsage}}, - {MLIL_CEIL, {SourceExprMediumLevelOperandUsage}}, - {MLIL_FTRUNC, {SourceExprMediumLevelOperandUsage}}, - {MLIL_FCMP_E, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FCMP_NE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FCMP_LT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FCMP_LE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FCMP_GE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FCMP_GT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FCMP_O, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, - {MLIL_FCMP_UO, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}} - }; + MediumLevelILInstructionBase::operationOperandUsage = {{MLIL_NOP, {}}, {MLIL_NORET, {}}, {MLIL_BP, {}}, + {MLIL_UNDEF, {}}, {MLIL_UNIMPL, {}}, + {MLIL_SET_VAR, {DestVariableMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_SET_VAR_FIELD, + {DestVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_SET_VAR_SPLIT, {HighVariableMediumLevelOperandUsage, LowVariableMediumLevelOperandUsage, + SourceExprMediumLevelOperandUsage}}, + {MLIL_SET_VAR_SSA, {DestSSAVariableMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_SET_VAR_SSA_FIELD, + {DestSSAVariableMediumLevelOperandUsage, PartialSSAVariableSourceMediumLevelOperandUsage, + OffsetMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_SET_VAR_SPLIT_SSA, {HighSSAVariableMediumLevelOperandUsage, LowSSAVariableMediumLevelOperandUsage, + SourceExprMediumLevelOperandUsage}}, + {MLIL_SET_VAR_ALIASED, {DestSSAVariableMediumLevelOperandUsage, PartialSSAVariableSourceMediumLevelOperandUsage, + SourceExprMediumLevelOperandUsage}}, + {MLIL_SET_VAR_ALIASED_FIELD, + {DestSSAVariableMediumLevelOperandUsage, PartialSSAVariableSourceMediumLevelOperandUsage, + OffsetMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_LOAD, {SourceExprMediumLevelOperandUsage}}, + {MLIL_LOAD_STRUCT, {SourceExprMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, + {MLIL_LOAD_SSA, {SourceExprMediumLevelOperandUsage, SourceMemoryVersionMediumLevelOperandUsage}}, + {MLIL_LOAD_STRUCT_SSA, {SourceExprMediumLevelOperandUsage, OffsetMediumLevelOperandUsage, + SourceMemoryVersionMediumLevelOperandUsage}}, + {MLIL_STORE, {DestExprMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_STORE_STRUCT, + {DestExprMediumLevelOperandUsage, OffsetMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_STORE_SSA, {DestExprMediumLevelOperandUsage, DestMemoryVersionMediumLevelOperandUsage, + SourceMemoryVersionMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_STORE_STRUCT_SSA, + {DestExprMediumLevelOperandUsage, OffsetMediumLevelOperandUsage, DestMemoryVersionMediumLevelOperandUsage, + SourceMemoryVersionMediumLevelOperandUsage, SourceExprMediumLevelOperandUsage}}, + {MLIL_VAR, {SourceVariableMediumLevelOperandUsage}}, + {MLIL_VAR_FIELD, {SourceVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, + {MLIL_VAR_SPLIT, {HighVariableMediumLevelOperandUsage, LowVariableMediumLevelOperandUsage}}, + {MLIL_VAR_SSA, {SourceSSAVariableMediumLevelOperandUsage}}, + {MLIL_VAR_SSA_FIELD, {SourceSSAVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, + {MLIL_VAR_ALIASED, {SourceSSAVariableMediumLevelOperandUsage}}, + {MLIL_VAR_ALIASED_FIELD, {SourceSSAVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, + {MLIL_VAR_SPLIT_SSA, {HighSSAVariableMediumLevelOperandUsage, LowSSAVariableMediumLevelOperandUsage}}, + {MLIL_ADDRESS_OF, {SourceVariableMediumLevelOperandUsage}}, + {MLIL_ADDRESS_OF_FIELD, {SourceVariableMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, + {MLIL_JUMP, {DestExprMediumLevelOperandUsage}}, + {MLIL_JUMP_TO, {DestExprMediumLevelOperandUsage, TargetsMediumLevelOperandUsage}}, + {MLIL_RET_HINT, {DestExprMediumLevelOperandUsage}}, + {MLIL_CALL, {OutputVariablesMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, + ParameterExprsMediumLevelOperandUsage}}, + {MLIL_CALL_UNTYPED, {OutputVariablesSubExprMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, + ParameterVariablesMediumLevelOperandUsage}}, + {MLIL_SYSCALL, {OutputVariablesMediumLevelOperandUsage, ParameterExprsMediumLevelOperandUsage}}, + {MLIL_SYSCALL_UNTYPED, {OutputVariablesSubExprMediumLevelOperandUsage, + ParameterVariablesMediumLevelOperandUsage, StackExprMediumLevelOperandUsage}}, + {MLIL_TAILCALL, {OutputVariablesMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, + ParameterExprsMediumLevelOperandUsage}}, + {MLIL_TAILCALL_UNTYPED, {OutputVariablesSubExprMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, + ParameterVariablesMediumLevelOperandUsage}}, + {MLIL_CALL_SSA, {OutputSSAVariablesSubExprMediumLevelOperandUsage, + OutputSSAMemoryVersionMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, + ParameterExprsMediumLevelOperandUsage, SourceMemoryVersionMediumLevelOperandUsage}}, + {MLIL_CALL_UNTYPED_SSA, + {OutputSSAVariablesSubExprMediumLevelOperandUsage, OutputSSAMemoryVersionMediumLevelOperandUsage, + DestExprMediumLevelOperandUsage, ParameterSSAVariablesMediumLevelOperandUsage, + ParameterSSAMemoryVersionMediumLevelOperandUsage, StackExprMediumLevelOperandUsage}}, + {MLIL_SYSCALL_SSA, + {OutputSSAVariablesSubExprMediumLevelOperandUsage, OutputSSAMemoryVersionMediumLevelOperandUsage, + ParameterExprsMediumLevelOperandUsage, SourceMemoryVersionMediumLevelOperandUsage}}, + {MLIL_SYSCALL_UNTYPED_SSA, + {OutputSSAVariablesSubExprMediumLevelOperandUsage, OutputSSAMemoryVersionMediumLevelOperandUsage, + ParameterSSAVariablesMediumLevelOperandUsage, ParameterSSAMemoryVersionMediumLevelOperandUsage, + StackExprMediumLevelOperandUsage}}, + {MLIL_TAILCALL_SSA, {OutputSSAVariablesSubExprMediumLevelOperandUsage, + OutputSSAMemoryVersionMediumLevelOperandUsage, DestExprMediumLevelOperandUsage, + ParameterExprsMediumLevelOperandUsage, SourceMemoryVersionMediumLevelOperandUsage}}, + {MLIL_TAILCALL_UNTYPED_SSA, + {OutputSSAVariablesSubExprMediumLevelOperandUsage, OutputSSAMemoryVersionMediumLevelOperandUsage, + DestExprMediumLevelOperandUsage, ParameterSSAVariablesMediumLevelOperandUsage, + ParameterSSAMemoryVersionMediumLevelOperandUsage, StackExprMediumLevelOperandUsage}}, + {MLIL_RET, {SourceExprsMediumLevelOperandUsage}}, + {MLIL_IF, {ConditionExprMediumLevelOperandUsage, TrueTargetMediumLevelOperandUsage, + FalseTargetMediumLevelOperandUsage}}, + {MLIL_GOTO, {TargetMediumLevelOperandUsage}}, + {MLIL_INTRINSIC, {OutputVariablesMediumLevelOperandUsage, IntrinsicMediumLevelOperandUsage, + ParameterExprsMediumLevelOperandUsage}}, + {MLIL_INTRINSIC_SSA, {OutputSSAVariablesMediumLevelOperandUsage, IntrinsicMediumLevelOperandUsage, + ParameterExprsMediumLevelOperandUsage}}, + {MLIL_FREE_VAR_SLOT, {DestVariableMediumLevelOperandUsage}}, + {MLIL_FREE_VAR_SLOT_SSA, + {DestSSAVariableMediumLevelOperandUsage, PartialSSAVariableSourceMediumLevelOperandUsage}}, + {MLIL_TRAP, {VectorMediumLevelOperandUsage}}, + {MLIL_VAR_PHI, {DestSSAVariableMediumLevelOperandUsage, SourceSSAVariablesMediumLevelOperandUsages}}, + {MLIL_MEM_PHI, {DestMemoryVersionMediumLevelOperandUsage, SourceMemoryVersionsMediumLevelOperandUsage}}, + {MLIL_CONST, {ConstantMediumLevelOperandUsage}}, {MLIL_CONST_PTR, {ConstantMediumLevelOperandUsage}}, + {MLIL_EXTERN_PTR, {ConstantMediumLevelOperandUsage, OffsetMediumLevelOperandUsage}}, + {MLIL_FLOAT_CONST, {ConstantMediumLevelOperandUsage}}, {MLIL_IMPORT, {ConstantMediumLevelOperandUsage}}, + {MLIL_ADD, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_SUB, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_AND, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_OR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_XOR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_LSL, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_LSR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_ASR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_ROL, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_ROR, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_MUL, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_MULU_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_MULS_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_DIVU, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_DIVS, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_MODU, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_MODS, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_E, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_NE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_SLT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_ULT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_SLE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_ULE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_SGE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_UGE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_SGT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_CMP_UGT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_TEST_BIT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_ADD_OVERFLOW, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_ADC, + {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage, CarryExprMediumLevelOperandUsage}}, + {MLIL_SBB, + {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage, CarryExprMediumLevelOperandUsage}}, + {MLIL_RLC, + {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage, CarryExprMediumLevelOperandUsage}}, + {MLIL_RRC, + {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage, CarryExprMediumLevelOperandUsage}}, + {MLIL_DIVU_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_DIVS_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_MODU_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_MODS_DP, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_NEG, {SourceExprMediumLevelOperandUsage}}, {MLIL_NOT, {SourceExprMediumLevelOperandUsage}}, + {MLIL_SX, {SourceExprMediumLevelOperandUsage}}, {MLIL_ZX, {SourceExprMediumLevelOperandUsage}}, + {MLIL_LOW_PART, {SourceExprMediumLevelOperandUsage}}, {MLIL_BOOL_TO_INT, {SourceExprMediumLevelOperandUsage}}, + {MLIL_UNIMPL_MEM, {SourceExprMediumLevelOperandUsage}}, + {MLIL_FADD, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FSUB, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FMUL, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FDIV, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FSQRT, {SourceExprMediumLevelOperandUsage}}, {MLIL_FNEG, {SourceExprMediumLevelOperandUsage}}, + {MLIL_FABS, {SourceExprMediumLevelOperandUsage}}, {MLIL_FLOAT_TO_INT, {SourceExprMediumLevelOperandUsage}}, + {MLIL_INT_TO_FLOAT, {SourceExprMediumLevelOperandUsage}}, + {MLIL_FLOAT_CONV, {SourceExprMediumLevelOperandUsage}}, + {MLIL_ROUND_TO_INT, {SourceExprMediumLevelOperandUsage}}, {MLIL_FLOOR, {SourceExprMediumLevelOperandUsage}}, + {MLIL_CEIL, {SourceExprMediumLevelOperandUsage}}, {MLIL_FTRUNC, {SourceExprMediumLevelOperandUsage}}, + {MLIL_FCMP_E, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FCMP_NE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FCMP_LT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FCMP_LE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FCMP_GE, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FCMP_GT, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FCMP_O, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}, + {MLIL_FCMP_UO, {LeftExprMediumLevelOperandUsage, RightExprMediumLevelOperandUsage}}}; -static unordered_map<BNMediumLevelILOperation, unordered_map<MediumLevelILOperandUsage, size_t>> GetOperandIndexForOperandUsages() +static unordered_map<BNMediumLevelILOperation, unordered_map<MediumLevelILOperandUsage, size_t>> + GetOperandIndexForOperandUsages() { unordered_map<BNMediumLevelILOperation, unordered_map<MediumLevelILOperandUsage, size_t>> result; result.reserve(MediumLevelILInstructionBase::operationOperandUsage.size()); @@ -302,22 +291,16 @@ static unordered_map<BNMediumLevelILOperation, unordered_map<MediumLevelILOperan unordered_map<BNMediumLevelILOperation, unordered_map<MediumLevelILOperandUsage, size_t>> - MediumLevelILInstructionBase::operationOperandIndex = GetOperandIndexForOperandUsages(); + MediumLevelILInstructionBase::operationOperandIndex = GetOperandIndexForOperandUsages(); -SSAVariable::SSAVariable(): version(0) -{ -} +SSAVariable::SSAVariable() : version(0) {} -SSAVariable::SSAVariable(const Variable& v, size_t i): var(v), version(i) -{ -} +SSAVariable::SSAVariable(const Variable& v, size_t i) : var(v), version(i) {} -SSAVariable::SSAVariable(const SSAVariable& v): var(v.var), version(v.version) -{ -} +SSAVariable::SSAVariable(const SSAVariable& v) : var(v.var), version(v.version) {} SSAVariable& SSAVariable::operator=(const SSAVariable& v) @@ -392,8 +375,8 @@ uint64_t MediumLevelILIntegerList::ListIterator::operator*() } -MediumLevelILIntegerList::MediumLevelILIntegerList(MediumLevelILFunction* func, - const BNMediumLevelILInstruction& instr, size_t count) +MediumLevelILIntegerList::MediumLevelILIntegerList( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count) { m_start.function = func; m_start.instr = instr; @@ -450,10 +433,10 @@ size_t MediumLevelILIndexList::ListIterator::operator*() } -MediumLevelILIndexList::MediumLevelILIndexList(MediumLevelILFunction* func, - const BNMediumLevelILInstruction& instr, size_t count): m_list(func, instr, count) -{ -} +MediumLevelILIndexList::MediumLevelILIndexList( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count) : + m_list(func, instr, count) +{} MediumLevelILIndexList::const_iterator MediumLevelILIndexList::begin() const @@ -508,10 +491,10 @@ const pair<uint64_t, size_t> MediumLevelILIndexMap::ListIterator::operator*() } -MediumLevelILIndexMap::MediumLevelILIndexMap(MediumLevelILFunction* func, - const BNMediumLevelILInstruction& instr, size_t count): m_list(func, instr, count & (~1)) -{ -} +MediumLevelILIndexMap::MediumLevelILIndexMap( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count) : + m_list(func, instr, count & (~1)) +{} MediumLevelILIndexMap::const_iterator MediumLevelILIndexMap::begin() const @@ -562,10 +545,10 @@ const Variable MediumLevelILVariableList::ListIterator::operator*() } -MediumLevelILVariableList::MediumLevelILVariableList(MediumLevelILFunction* func, - const BNMediumLevelILInstruction& instr, size_t count): m_list(func, instr, count) -{ -} +MediumLevelILVariableList::MediumLevelILVariableList( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count) : + m_list(func, instr, count) +{} MediumLevelILVariableList::const_iterator MediumLevelILVariableList::begin() const @@ -620,10 +603,10 @@ const SSAVariable MediumLevelILSSAVariableList::ListIterator::operator*() } -MediumLevelILSSAVariableList::MediumLevelILSSAVariableList(MediumLevelILFunction* func, - const BNMediumLevelILInstruction& instr, size_t count): m_list(func, instr, count & (~1)) -{ -} +MediumLevelILSSAVariableList::MediumLevelILSSAVariableList( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count) : + m_list(func, instr, count & (~1)) +{} MediumLevelILSSAVariableList::const_iterator MediumLevelILSSAVariableList::begin() const @@ -670,16 +653,16 @@ MediumLevelILSSAVariableList::operator vector<SSAVariable>() const const MediumLevelILInstruction MediumLevelILInstructionList::ListIterator::operator*() { - return MediumLevelILInstruction(pos.GetFunction(), pos.GetFunction()->GetRawExpr((size_t)*pos), - (size_t)*pos, instructionIndex); + return MediumLevelILInstruction( + pos.GetFunction(), pos.GetFunction()->GetRawExpr((size_t)*pos), (size_t)*pos, instructionIndex); } -MediumLevelILInstructionList::MediumLevelILInstructionList(MediumLevelILFunction* func, - const BNMediumLevelILInstruction& instr, size_t count, size_t instrIndex): - m_list(func, instr, count), m_instructionIndex(instrIndex) -{ -} +MediumLevelILInstructionList::MediumLevelILInstructionList( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count, size_t instrIndex) : + m_list(func, instr, count), + m_instructionIndex(instrIndex) +{} MediumLevelILInstructionList::const_iterator MediumLevelILInstructionList::begin() const @@ -726,9 +709,10 @@ MediumLevelILInstructionList::operator vector<MediumLevelILInstruction>() const } -MediumLevelILOperand::MediumLevelILOperand(const MediumLevelILInstruction& instr, - MediumLevelILOperandUsage usage, size_t operandIndex): - m_instr(instr), m_usage(usage), m_operandIndex(operandIndex) +MediumLevelILOperand::MediumLevelILOperand( + const MediumLevelILInstruction& instr, MediumLevelILOperandUsage usage, size_t operandIndex) : + m_instr(instr), + m_usage(usage), m_operandIndex(operandIndex) { auto i = MediumLevelILInstructionBase::operandTypeForUsage.find(m_usage); if (i == MediumLevelILInstructionBase::operandTypeForUsage.end()) @@ -749,8 +733,8 @@ size_t MediumLevelILOperand::GetIndex() const { if (m_type != IndexMediumLevelOperand) throw MediumLevelILInstructionAccessException(); - if ((m_usage == OutputSSAMemoryVersionMediumLevelOperandUsage) || - (m_usage == ParameterSSAMemoryVersionMediumLevelOperandUsage)) + if ((m_usage == OutputSSAMemoryVersionMediumLevelOperandUsage) + || (m_usage == ParameterSSAMemoryVersionMediumLevelOperandUsage)) return m_instr.GetRawOperandAsExpr(m_operandIndex).GetRawOperandAsIndex(0); return m_instr.GetRawOperandAsIndex(m_operandIndex); } @@ -810,8 +794,8 @@ MediumLevelILVariableList MediumLevelILOperand::GetVariableList() const { if (m_type != VariableListMediumLevelOperand) throw MediumLevelILInstructionAccessException(); - if ((m_usage == OutputVariablesSubExprMediumLevelOperandUsage) || - (m_usage == ParameterVariablesMediumLevelOperandUsage)) + if ((m_usage == OutputVariablesSubExprMediumLevelOperandUsage) + || (m_usage == ParameterVariablesMediumLevelOperandUsage)) return m_instr.GetRawOperandAsExpr(m_operandIndex).GetRawOperandAsVariableList(0); return m_instr.GetRawOperandAsVariableList(m_operandIndex); } @@ -821,8 +805,8 @@ MediumLevelILSSAVariableList MediumLevelILOperand::GetSSAVariableList() const { if (m_type != SSAVariableListMediumLevelOperand) throw MediumLevelILInstructionAccessException(); - if ((m_usage == OutputSSAVariablesSubExprMediumLevelOperandUsage) || - (m_usage == ParameterSSAVariablesMediumLevelOperandUsage)) + if ((m_usage == OutputSSAVariablesSubExprMediumLevelOperandUsage) + || (m_usage == ParameterSSAVariablesMediumLevelOperandUsage)) return m_instr.GetRawOperandAsExpr(m_operandIndex).GetRawOperandAsSSAVariableList(1); return m_instr.GetRawOperandAsSSAVariableList(m_operandIndex); } @@ -847,11 +831,11 @@ const MediumLevelILOperand MediumLevelILOperandList::ListIterator::operator*() MediumLevelILOperandList::MediumLevelILOperandList(const MediumLevelILInstruction& instr, - const vector<MediumLevelILOperandUsage>& usageList, - const unordered_map<MediumLevelILOperandUsage, size_t>& operandIndexMap): - m_instr(instr), m_usageList(usageList), m_operandIndexMap(operandIndexMap) -{ -} + const vector<MediumLevelILOperandUsage>& usageList, + const unordered_map<MediumLevelILOperandUsage, size_t>& operandIndexMap) : + m_instr(instr), + m_usageList(usageList), m_operandIndexMap(operandIndexMap) +{} MediumLevelILOperandList::const_iterator MediumLevelILOperandList::begin() const @@ -909,8 +893,8 @@ MediumLevelILInstruction::MediumLevelILInstruction() } -MediumLevelILInstruction::MediumLevelILInstruction(MediumLevelILFunction* func, - const BNMediumLevelILInstruction& instr, size_t expr, size_t instrIdx) +MediumLevelILInstruction::MediumLevelILInstruction( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t expr, size_t instrIdx) { operation = instr.operation; sourceOperand = instr.sourceOperand; @@ -970,7 +954,8 @@ size_t MediumLevelILInstructionBase::GetRawOperandAsIndex(size_t operand) const MediumLevelILInstruction MediumLevelILInstructionBase::GetRawOperandAsExpr(size_t operand) const { - return MediumLevelILInstruction(function, function->GetRawExpr(operands[operand]), operands[operand], instructionIndex); + return MediumLevelILInstruction( + function, function->GetRawExpr(operands[operand]), operands[operand], instructionIndex); } @@ -1018,8 +1003,8 @@ MediumLevelILSSAVariableList MediumLevelILInstructionBase::GetRawOperandAsSSAVar MediumLevelILInstructionList MediumLevelILInstructionBase::GetRawOperandAsExprList(size_t operand) const { - return MediumLevelILInstructionList(function, function->GetRawExpr(operands[operand + 1]), operands[operand], - instructionIndex); + return MediumLevelILInstructionList( + function, function->GetRawExpr(operands[operand + 1]), operands[operand], instructionIndex); } @@ -1030,14 +1015,16 @@ void MediumLevelILInstructionBase::UpdateRawOperand(size_t operandIndex, ExprId } -void MediumLevelILInstructionBase::UpdateRawOperandAsSSAVariableList(size_t operandIndex, const vector<SSAVariable>& vars) +void MediumLevelILInstructionBase::UpdateRawOperandAsSSAVariableList( + size_t operandIndex, const vector<SSAVariable>& vars) { UpdateRawOperand(operandIndex, vars.size() * 2); UpdateRawOperand(operandIndex + 1, function->AddSSAVariableList(vars)); } -void MediumLevelILInstructionBase::UpdateRawOperandAsExprList(size_t operandIndex, const vector<MediumLevelILInstruction>& exprs) +void MediumLevelILInstructionBase::UpdateRawOperandAsExprList( + size_t operandIndex, const vector<MediumLevelILInstruction>& exprs) { vector<ExprId> exprIndexList; for (auto& i : exprs) @@ -1490,14 +1477,12 @@ void MediumLevelILInstruction::VisitExprs(const std::function<bool(const MediumL ExprId MediumLevelILInstruction::CopyTo(MediumLevelILFunction* dest) const { - return CopyTo(dest, [&](const MediumLevelILInstruction& subExpr) { - return subExpr.CopyTo(dest); - }); + return CopyTo(dest, [&](const MediumLevelILInstruction& subExpr) { return subExpr.CopyTo(dest); }); } ExprId MediumLevelILInstruction::CopyTo(MediumLevelILFunction* dest, - const std::function<ExprId(const MediumLevelILInstruction& subExpr)>& subExprHandler) const + const std::function<ExprId(const MediumLevelILInstruction& subExpr)>& subExprHandler) const { vector<ExprId> params; BNMediumLevelILLabel* labelA; @@ -1507,128 +1492,116 @@ ExprId MediumLevelILInstruction::CopyTo(MediumLevelILFunction* dest, case MLIL_NOP: return dest->Nop(*this); case MLIL_SET_VAR: - return dest->SetVar(size, GetDestVariable<MLIL_SET_VAR>(), - subExprHandler(GetSourceExpr<MLIL_SET_VAR>()), *this); + return dest->SetVar( + size, GetDestVariable<MLIL_SET_VAR>(), subExprHandler(GetSourceExpr<MLIL_SET_VAR>()), *this); case MLIL_SET_VAR_SSA: - return dest->SetVarSSA(size, GetDestSSAVariable<MLIL_SET_VAR_SSA>(), - subExprHandler(GetSourceExpr<MLIL_SET_VAR_SSA>()), *this); + return dest->SetVarSSA( + size, GetDestSSAVariable<MLIL_SET_VAR_SSA>(), subExprHandler(GetSourceExpr<MLIL_SET_VAR_SSA>()), *this); case MLIL_SET_VAR_ALIASED: return dest->SetVarAliased(size, GetDestSSAVariable<MLIL_SET_VAR_ALIASED>().var, - GetDestSSAVariable<MLIL_SET_VAR_ALIASED>().version, - GetSourceSSAVariable<MLIL_SET_VAR_ALIASED>().version, - subExprHandler(GetSourceExpr<MLIL_SET_VAR_ALIASED>()), *this); + GetDestSSAVariable<MLIL_SET_VAR_ALIASED>().version, GetSourceSSAVariable<MLIL_SET_VAR_ALIASED>().version, + subExprHandler(GetSourceExpr<MLIL_SET_VAR_ALIASED>()), *this); case MLIL_SET_VAR_SPLIT: - return dest->SetVarSplit(size, GetHighVariable<MLIL_SET_VAR_SPLIT>(), - GetLowVariable<MLIL_SET_VAR_SPLIT>(), - subExprHandler(GetSourceExpr<MLIL_SET_VAR_SPLIT>()), *this); + return dest->SetVarSplit(size, GetHighVariable<MLIL_SET_VAR_SPLIT>(), GetLowVariable<MLIL_SET_VAR_SPLIT>(), + subExprHandler(GetSourceExpr<MLIL_SET_VAR_SPLIT>()), *this); case MLIL_SET_VAR_SPLIT_SSA: return dest->SetVarSSASplit(size, GetHighSSAVariable<MLIL_SET_VAR_SPLIT_SSA>(), - GetLowSSAVariable<MLIL_SET_VAR_SPLIT_SSA>(), - subExprHandler(GetSourceExpr<MLIL_SET_VAR_SPLIT_SSA>()), *this); + GetLowSSAVariable<MLIL_SET_VAR_SPLIT_SSA>(), subExprHandler(GetSourceExpr<MLIL_SET_VAR_SPLIT_SSA>()), + *this); case MLIL_SET_VAR_FIELD: - return dest->SetVarField(size, GetDestVariable<MLIL_SET_VAR_FIELD>(), - GetOffset<MLIL_SET_VAR_FIELD>(), subExprHandler(GetSourceExpr<MLIL_SET_VAR_FIELD>()), *this); + return dest->SetVarField(size, GetDestVariable<MLIL_SET_VAR_FIELD>(), GetOffset<MLIL_SET_VAR_FIELD>(), + subExprHandler(GetSourceExpr<MLIL_SET_VAR_FIELD>()), *this); case MLIL_SET_VAR_SSA_FIELD: return dest->SetVarSSAField(size, GetDestSSAVariable<MLIL_SET_VAR_SSA_FIELD>().var, - GetDestSSAVariable<MLIL_SET_VAR_SSA_FIELD>().version, - GetSourceSSAVariable<MLIL_SET_VAR_SSA_FIELD>().version, - GetOffset<MLIL_SET_VAR_SSA_FIELD>(), - subExprHandler(GetSourceExpr<MLIL_SET_VAR_SSA_FIELD>()), *this); + GetDestSSAVariable<MLIL_SET_VAR_SSA_FIELD>().version, + GetSourceSSAVariable<MLIL_SET_VAR_SSA_FIELD>().version, GetOffset<MLIL_SET_VAR_SSA_FIELD>(), + subExprHandler(GetSourceExpr<MLIL_SET_VAR_SSA_FIELD>()), *this); case MLIL_SET_VAR_ALIASED_FIELD: return dest->SetVarAliasedField(size, GetDestSSAVariable<MLIL_SET_VAR_ALIASED_FIELD>().var, - GetDestSSAVariable<MLIL_SET_VAR_ALIASED_FIELD>().version, - GetSourceSSAVariable<MLIL_SET_VAR_ALIASED_FIELD>().version, - GetOffset<MLIL_SET_VAR_ALIASED_FIELD>(), - subExprHandler(GetSourceExpr<MLIL_SET_VAR_ALIASED_FIELD>()), *this); + GetDestSSAVariable<MLIL_SET_VAR_ALIASED_FIELD>().version, + GetSourceSSAVariable<MLIL_SET_VAR_ALIASED_FIELD>().version, GetOffset<MLIL_SET_VAR_ALIASED_FIELD>(), + subExprHandler(GetSourceExpr<MLIL_SET_VAR_ALIASED_FIELD>()), *this); case MLIL_VAR: return dest->Var(size, GetSourceVariable<MLIL_VAR>(), *this); case MLIL_VAR_FIELD: - return dest->VarField(size, GetSourceVariable<MLIL_VAR_FIELD>(), - GetOffset<MLIL_VAR_FIELD>(), *this); + return dest->VarField(size, GetSourceVariable<MLIL_VAR_FIELD>(), GetOffset<MLIL_VAR_FIELD>(), *this); case MLIL_VAR_SPLIT: - return dest->VarSplit(size, GetHighVariable<MLIL_VAR_SPLIT>(), - GetLowVariable<MLIL_VAR_SPLIT>(), *this); + return dest->VarSplit(size, GetHighVariable<MLIL_VAR_SPLIT>(), GetLowVariable<MLIL_VAR_SPLIT>(), *this); case MLIL_VAR_SSA: return dest->VarSSA(size, GetSourceSSAVariable<MLIL_VAR_SSA>(), *this); case MLIL_VAR_SSA_FIELD: - return dest->VarSSAField(size, GetSourceSSAVariable<MLIL_VAR_SSA_FIELD>(), - GetOffset<MLIL_VAR_SSA_FIELD>(), *this); + return dest->VarSSAField( + size, GetSourceSSAVariable<MLIL_VAR_SSA_FIELD>(), GetOffset<MLIL_VAR_SSA_FIELD>(), *this); case MLIL_VAR_ALIASED: return dest->VarAliased(size, GetSourceSSAVariable<MLIL_VAR_ALIASED>().var, - GetSourceSSAVariable<MLIL_VAR_ALIASED>().version, *this); + GetSourceSSAVariable<MLIL_VAR_ALIASED>().version, *this); case MLIL_VAR_ALIASED_FIELD: return dest->VarAliasedField(size, GetSourceSSAVariable<MLIL_VAR_ALIASED_FIELD>().var, - GetSourceSSAVariable<MLIL_VAR_ALIASED_FIELD>().version, - GetOffset<MLIL_VAR_ALIASED_FIELD>(), *this); + GetSourceSSAVariable<MLIL_VAR_ALIASED_FIELD>().version, GetOffset<MLIL_VAR_ALIASED_FIELD>(), *this); case MLIL_VAR_SPLIT_SSA: - return dest->VarSplitSSA(size, GetHighSSAVariable<MLIL_VAR_SPLIT_SSA>(), - GetLowSSAVariable<MLIL_VAR_SPLIT_SSA>(), *this); + return dest->VarSplitSSA( + size, GetHighSSAVariable<MLIL_VAR_SPLIT_SSA>(), GetLowSSAVariable<MLIL_VAR_SPLIT_SSA>(), *this); case MLIL_ADDRESS_OF: return dest->AddressOf(GetSourceVariable<MLIL_ADDRESS_OF>(), *this); case MLIL_ADDRESS_OF_FIELD: - return dest->AddressOfField(GetSourceVariable<MLIL_ADDRESS_OF_FIELD>(), - GetOffset<MLIL_ADDRESS_OF_FIELD>(), *this); + return dest->AddressOfField( + GetSourceVariable<MLIL_ADDRESS_OF_FIELD>(), GetOffset<MLIL_ADDRESS_OF_FIELD>(), *this); case MLIL_CALL: for (auto i : GetParameterExprs<MLIL_CALL>()) params.push_back(subExprHandler(i)); - return dest->Call(GetOutputVariables<MLIL_CALL>(), subExprHandler(GetDestExpr<MLIL_CALL>()), - params, *this); + return dest->Call(GetOutputVariables<MLIL_CALL>(), subExprHandler(GetDestExpr<MLIL_CALL>()), params, *this); case MLIL_CALL_UNTYPED: return dest->CallUntyped(GetOutputVariables<MLIL_CALL_UNTYPED>(), - subExprHandler(GetDestExpr<MLIL_CALL_UNTYPED>()), GetParameterVariables<MLIL_CALL_UNTYPED>(), - subExprHandler(GetStackExpr<MLIL_CALL_UNTYPED>()), *this); + subExprHandler(GetDestExpr<MLIL_CALL_UNTYPED>()), GetParameterVariables<MLIL_CALL_UNTYPED>(), + subExprHandler(GetStackExpr<MLIL_CALL_UNTYPED>()), *this); case MLIL_CALL_SSA: for (auto i : GetParameterExprs<MLIL_CALL_SSA>()) params.push_back(subExprHandler(i)); return dest->CallSSA(GetOutputSSAVariables<MLIL_CALL_SSA>(), subExprHandler(GetDestExpr<MLIL_CALL_SSA>()), - params, GetDestMemoryVersion<MLIL_CALL_SSA>(), GetSourceMemoryVersion<MLIL_CALL_SSA>(), *this); + params, GetDestMemoryVersion<MLIL_CALL_SSA>(), GetSourceMemoryVersion<MLIL_CALL_SSA>(), *this); case MLIL_CALL_UNTYPED_SSA: return dest->CallUntypedSSA(GetOutputSSAVariables<MLIL_CALL_UNTYPED_SSA>(), - subExprHandler(GetDestExpr<MLIL_CALL_UNTYPED_SSA>()), - GetParameterSSAVariables<MLIL_CALL_UNTYPED_SSA>(), - GetDestMemoryVersion<MLIL_CALL_UNTYPED_SSA>(), - GetSourceMemoryVersion<MLIL_CALL_UNTYPED_SSA>(), - subExprHandler(GetStackExpr<MLIL_CALL_UNTYPED_SSA>()), *this); + subExprHandler(GetDestExpr<MLIL_CALL_UNTYPED_SSA>()), GetParameterSSAVariables<MLIL_CALL_UNTYPED_SSA>(), + GetDestMemoryVersion<MLIL_CALL_UNTYPED_SSA>(), GetSourceMemoryVersion<MLIL_CALL_UNTYPED_SSA>(), + subExprHandler(GetStackExpr<MLIL_CALL_UNTYPED_SSA>()), *this); case MLIL_SYSCALL: for (auto i : GetParameterExprs<MLIL_SYSCALL>()) params.push_back(subExprHandler(i)); return dest->Syscall(GetOutputVariables<MLIL_SYSCALL>(), params, *this); case MLIL_SYSCALL_UNTYPED: return dest->SyscallUntyped(GetOutputVariables<MLIL_SYSCALL_UNTYPED>(), - GetParameterVariables<MLIL_SYSCALL_UNTYPED>(), - subExprHandler(GetStackExpr<MLIL_SYSCALL_UNTYPED>()), *this); + GetParameterVariables<MLIL_SYSCALL_UNTYPED>(), subExprHandler(GetStackExpr<MLIL_SYSCALL_UNTYPED>()), *this); case MLIL_SYSCALL_SSA: for (auto i : GetParameterExprs<MLIL_SYSCALL_SSA>()) params.push_back(subExprHandler(i)); return dest->SyscallSSA(GetOutputSSAVariables<MLIL_SYSCALL_SSA>(), params, - GetDestMemoryVersion<MLIL_SYSCALL_SSA>(), GetSourceMemoryVersion<MLIL_SYSCALL_SSA>(), *this); + GetDestMemoryVersion<MLIL_SYSCALL_SSA>(), GetSourceMemoryVersion<MLIL_SYSCALL_SSA>(), *this); case MLIL_SYSCALL_UNTYPED_SSA: return dest->SyscallUntypedSSA(GetOutputSSAVariables<MLIL_SYSCALL_UNTYPED_SSA>(), - GetParameterSSAVariables<MLIL_SYSCALL_UNTYPED_SSA>(), - GetDestMemoryVersion<MLIL_SYSCALL_UNTYPED_SSA>(), - GetSourceMemoryVersion<MLIL_SYSCALL_UNTYPED_SSA>(), - subExprHandler(GetStackExpr<MLIL_SYSCALL_UNTYPED_SSA>()), *this); + GetParameterSSAVariables<MLIL_SYSCALL_UNTYPED_SSA>(), GetDestMemoryVersion<MLIL_SYSCALL_UNTYPED_SSA>(), + GetSourceMemoryVersion<MLIL_SYSCALL_UNTYPED_SSA>(), + subExprHandler(GetStackExpr<MLIL_SYSCALL_UNTYPED_SSA>()), *this); case MLIL_TAILCALL: for (auto i : GetParameterExprs<MLIL_TAILCALL>()) params.push_back(subExprHandler(i)); - return dest->TailCall(GetOutputVariables<MLIL_TAILCALL>(), subExprHandler(GetDestExpr<MLIL_TAILCALL>()), - params, *this); + return dest->TailCall( + GetOutputVariables<MLIL_TAILCALL>(), subExprHandler(GetDestExpr<MLIL_TAILCALL>()), params, *this); case MLIL_TAILCALL_UNTYPED: return dest->TailCallUntyped(GetOutputVariables<MLIL_TAILCALL_UNTYPED>(), - subExprHandler(GetDestExpr<MLIL_TAILCALL_UNTYPED>()), GetParameterVariables<MLIL_TAILCALL_UNTYPED>(), - subExprHandler(GetStackExpr<MLIL_TAILCALL_UNTYPED>()), *this); + subExprHandler(GetDestExpr<MLIL_TAILCALL_UNTYPED>()), GetParameterVariables<MLIL_TAILCALL_UNTYPED>(), + subExprHandler(GetStackExpr<MLIL_TAILCALL_UNTYPED>()), *this); case MLIL_TAILCALL_SSA: for (auto i : GetParameterExprs<MLIL_TAILCALL_SSA>()) params.push_back(subExprHandler(i)); - return dest->TailCallSSA(GetOutputSSAVariables<MLIL_TAILCALL_SSA>(), subExprHandler(GetDestExpr<MLIL_TAILCALL_SSA>()), - params, GetDestMemoryVersion<MLIL_TAILCALL_SSA>(), GetSourceMemoryVersion<MLIL_TAILCALL_SSA>(), *this); + return dest->TailCallSSA(GetOutputSSAVariables<MLIL_TAILCALL_SSA>(), + subExprHandler(GetDestExpr<MLIL_TAILCALL_SSA>()), params, GetDestMemoryVersion<MLIL_TAILCALL_SSA>(), + GetSourceMemoryVersion<MLIL_TAILCALL_SSA>(), *this); case MLIL_TAILCALL_UNTYPED_SSA: return dest->TailCallUntypedSSA(GetOutputSSAVariables<MLIL_TAILCALL_UNTYPED_SSA>(), - subExprHandler(GetDestExpr<MLIL_TAILCALL_UNTYPED_SSA>()), - GetParameterSSAVariables<MLIL_TAILCALL_UNTYPED_SSA>(), - GetDestMemoryVersion<MLIL_TAILCALL_UNTYPED_SSA>(), - GetSourceMemoryVersion<MLIL_TAILCALL_UNTYPED_SSA>(), - subExprHandler(GetStackExpr<MLIL_TAILCALL_UNTYPED_SSA>()), *this); + subExprHandler(GetDestExpr<MLIL_TAILCALL_UNTYPED_SSA>()), + GetParameterSSAVariables<MLIL_TAILCALL_UNTYPED_SSA>(), GetDestMemoryVersion<MLIL_TAILCALL_UNTYPED_SSA>(), + GetSourceMemoryVersion<MLIL_TAILCALL_UNTYPED_SSA>(), + subExprHandler(GetStackExpr<MLIL_TAILCALL_UNTYPED_SSA>()), *this); case MLIL_RET: for (auto i : GetSourceExprs<MLIL_RET>()) params.push_back(subExprHandler(i)); @@ -1636,31 +1609,31 @@ ExprId MediumLevelILInstruction::CopyTo(MediumLevelILFunction* dest, case MLIL_NORET: return dest->NoReturn(*this); case MLIL_STORE: - return dest->Store(size, subExprHandler(GetDestExpr<MLIL_STORE>()), - subExprHandler(GetSourceExpr<MLIL_STORE>()), *this); + return dest->Store( + size, subExprHandler(GetDestExpr<MLIL_STORE>()), subExprHandler(GetSourceExpr<MLIL_STORE>()), *this); case MLIL_STORE_STRUCT: - return dest->StoreStruct(size, subExprHandler(GetDestExpr<MLIL_STORE_STRUCT>()), - GetOffset<MLIL_STORE_STRUCT>(), subExprHandler(GetSourceExpr<MLIL_STORE_STRUCT>()), *this); + return dest->StoreStruct(size, subExprHandler(GetDestExpr<MLIL_STORE_STRUCT>()), GetOffset<MLIL_STORE_STRUCT>(), + subExprHandler(GetSourceExpr<MLIL_STORE_STRUCT>()), *this); case MLIL_STORE_SSA: return dest->StoreSSA(size, subExprHandler(GetDestExpr<MLIL_STORE_SSA>()), - GetDestMemoryVersion<MLIL_STORE_SSA>(), GetSourceMemoryVersion<MLIL_STORE_SSA>(), - subExprHandler(GetSourceExpr<MLIL_STORE_SSA>()), *this); + GetDestMemoryVersion<MLIL_STORE_SSA>(), GetSourceMemoryVersion<MLIL_STORE_SSA>(), + subExprHandler(GetSourceExpr<MLIL_STORE_SSA>()), *this); case MLIL_STORE_STRUCT_SSA: return dest->StoreStructSSA(size, subExprHandler(GetDestExpr<MLIL_STORE_STRUCT_SSA>()), - GetOffset<MLIL_STORE_STRUCT_SSA>(), - GetDestMemoryVersion<MLIL_STORE_STRUCT_SSA>(), GetSourceMemoryVersion<MLIL_STORE_STRUCT_SSA>(), - subExprHandler(GetSourceExpr<MLIL_STORE_STRUCT_SSA>()), *this); + GetOffset<MLIL_STORE_STRUCT_SSA>(), GetDestMemoryVersion<MLIL_STORE_STRUCT_SSA>(), + GetSourceMemoryVersion<MLIL_STORE_STRUCT_SSA>(), subExprHandler(GetSourceExpr<MLIL_STORE_STRUCT_SSA>()), + *this); case MLIL_LOAD: return dest->Load(size, subExprHandler(GetSourceExpr<MLIL_LOAD>()), *this); case MLIL_LOAD_STRUCT: - return dest->LoadStruct(size, subExprHandler(GetSourceExpr<MLIL_LOAD_STRUCT>()), - GetOffset<MLIL_LOAD_STRUCT>(), *this); + return dest->LoadStruct( + size, subExprHandler(GetSourceExpr<MLIL_LOAD_STRUCT>()), GetOffset<MLIL_LOAD_STRUCT>(), *this); case MLIL_LOAD_SSA: - return dest->LoadSSA(size, subExprHandler(GetSourceExpr<MLIL_LOAD_SSA>()), - GetSourceMemoryVersion<MLIL_LOAD_SSA>(), *this); + return dest->LoadSSA( + size, subExprHandler(GetSourceExpr<MLIL_LOAD_SSA>()), GetSourceMemoryVersion<MLIL_LOAD_SSA>(), *this); case MLIL_LOAD_STRUCT_SSA: return dest->LoadStructSSA(size, subExprHandler(GetSourceExpr<MLIL_LOAD_STRUCT_SSA>()), - GetOffset<MLIL_LOAD_STRUCT_SSA>(), GetSourceMemoryVersion<MLIL_LOAD_STRUCT_SSA>(), *this); + GetOffset<MLIL_LOAD_STRUCT_SSA>(), GetSourceMemoryVersion<MLIL_LOAD_STRUCT_SSA>(), *this); case MLIL_NEG: case MLIL_NOT: case MLIL_SX: @@ -1680,8 +1653,7 @@ ExprId MediumLevelILInstruction::CopyTo(MediumLevelILFunction* dest, case MLIL_FLOOR: case MLIL_CEIL: case MLIL_FTRUNC: - return dest->AddExprWithLocation(operation, *this, size, - subExprHandler(AsOneOperand().GetSourceExpr())); + return dest->AddExprWithLocation(operation, *this, size, subExprHandler(AsOneOperand().GetSourceExpr())); case MLIL_ADD: case MLIL_SUB: case MLIL_AND: @@ -1727,34 +1699,34 @@ ExprId MediumLevelILInstruction::CopyTo(MediumLevelILFunction* dest, case MLIL_FCMP_GT: case MLIL_FCMP_O: case MLIL_FCMP_UO: - return dest->AddExprWithLocation(operation, *this, size, - subExprHandler(AsTwoOperand().GetLeftExpr()), subExprHandler(AsTwoOperand().GetRightExpr())); + return dest->AddExprWithLocation(operation, *this, size, subExprHandler(AsTwoOperand().GetLeftExpr()), + subExprHandler(AsTwoOperand().GetRightExpr())); case MLIL_ADC: case MLIL_SBB: case MLIL_RLC: case MLIL_RRC: - return dest->AddExprWithLocation(operation, *this, size, - subExprHandler(AsTwoOperandWithCarry().GetLeftExpr()), - subExprHandler(AsTwoOperandWithCarry().GetRightExpr()), - subExprHandler(AsTwoOperandWithCarry().GetCarryExpr())); + return dest->AddExprWithLocation(operation, *this, size, subExprHandler(AsTwoOperandWithCarry().GetLeftExpr()), + subExprHandler(AsTwoOperandWithCarry().GetRightExpr()), + subExprHandler(AsTwoOperandWithCarry().GetCarryExpr())); case MLIL_JUMP_TO: + { + map<uint64_t, BNMediumLevelILLabel*> labelList; + for (auto target : GetTargets<MLIL_JUMP_TO>()) { - map<uint64_t, BNMediumLevelILLabel*> labelList; - for (auto target : GetTargets<MLIL_JUMP_TO>()) - { - labelA = dest->GetLabelForSourceInstruction(target.second); - if (!labelA) - return dest->Jump(subExprHandler(GetDestExpr<MLIL_JUMP_TO>()), *this); - labelList[target.first] = labelA; - } - return dest->JumpTo(subExprHandler(GetDestExpr<MLIL_JUMP_TO>()), labelList, *this); + labelA = dest->GetLabelForSourceInstruction(target.second); + if (!labelA) + return dest->Jump(subExprHandler(GetDestExpr<MLIL_JUMP_TO>()), *this); + labelList[target.first] = labelA; } + return dest->JumpTo(subExprHandler(GetDestExpr<MLIL_JUMP_TO>()), labelList, *this); + } case MLIL_GOTO: labelA = dest->GetLabelForSourceInstruction(GetTarget<MLIL_GOTO>()); if (!labelA) { return dest->Jump(dest->ConstPointer(function->GetArchitecture()->GetAddressSize(), - function->GetInstruction(GetTarget<MLIL_GOTO>()).address), *this); + function->GetInstruction(GetTarget<MLIL_GOTO>()).address), + *this); } return dest->Goto(*labelA, *this); case MLIL_IF: @@ -1780,19 +1752,18 @@ ExprId MediumLevelILInstruction::CopyTo(MediumLevelILFunction* dest, case MLIL_INTRINSIC: for (auto i : GetParameterExprs<MLIL_INTRINSIC>()) params.push_back(subExprHandler(i)); - return dest->Intrinsic(GetOutputVariables<MLIL_INTRINSIC>(), - GetIntrinsic<MLIL_INTRINSIC>(), params, *this); + return dest->Intrinsic(GetOutputVariables<MLIL_INTRINSIC>(), GetIntrinsic<MLIL_INTRINSIC>(), params, *this); case MLIL_INTRINSIC_SSA: for (auto i : GetParameterExprs<MLIL_INTRINSIC_SSA>()) params.push_back(subExprHandler(i)); - return dest->IntrinsicSSA(GetOutputSSAVariables<MLIL_INTRINSIC_SSA>(), - GetIntrinsic<MLIL_INTRINSIC_SSA>(), params, *this); + return dest->IntrinsicSSA( + GetOutputSSAVariables<MLIL_INTRINSIC_SSA>(), GetIntrinsic<MLIL_INTRINSIC_SSA>(), params, *this); case MLIL_FREE_VAR_SLOT: return dest->FreeVarSlot(GetDestVariable<MLIL_FREE_VAR_SLOT>(), *this); case MLIL_FREE_VAR_SLOT_SSA: return dest->FreeVarSlotSSA(GetDestSSAVariable<MLIL_FREE_VAR_SLOT_SSA>().var, - GetDestSSAVariable<MLIL_FREE_VAR_SLOT_SSA>().version, - GetSourceSSAVariable<MLIL_FREE_VAR_SLOT_SSA>().version, *this); + GetDestSSAVariable<MLIL_FREE_VAR_SLOT_SSA>().version, + GetSourceSSAVariable<MLIL_FREE_VAR_SLOT_SSA>().version, *this); case MLIL_UNDEF: return dest->Undefined(*this); case MLIL_UNIMPL: @@ -2129,66 +2100,61 @@ ExprId MediumLevelILFunction::Nop(const ILSourceLocation& loc) } -ExprId MediumLevelILFunction::SetVar(size_t size, const Variable& dest, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SetVar(size_t size, const Variable& dest, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SET_VAR, loc, size, dest.ToIdentifier(), src); } -ExprId MediumLevelILFunction::SetVarField(size_t size, const Variable& dest, uint64_t offset, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SetVarField( + size_t size, const Variable& dest, uint64_t offset, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SET_VAR_FIELD, loc, size, dest.ToIdentifier(), offset, src); } -ExprId MediumLevelILFunction::SetVarSplit(size_t size, const Variable& high, const Variable& low, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SetVarSplit( + size_t size, const Variable& high, const Variable& low, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SET_VAR_SPLIT, loc, size, high.ToIdentifier(), low.ToIdentifier(), src); } -ExprId MediumLevelILFunction::SetVarSSA(size_t size, const SSAVariable& dest, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SetVarSSA(size_t size, const SSAVariable& dest, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SET_VAR_SSA, loc, size, dest.var.ToIdentifier(), dest.version, src); } -ExprId MediumLevelILFunction::SetVarSSAField(size_t size, const Variable& dest, - size_t newVersion, size_t prevVersion, uint64_t offset, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SetVarSSAField(size_t size, const Variable& dest, size_t newVersion, size_t prevVersion, + uint64_t offset, ExprId src, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_SET_VAR_SSA_FIELD, loc, size, dest.ToIdentifier(), newVersion, prevVersion, - offset, src); + return AddExprWithLocation( + MLIL_SET_VAR_SSA_FIELD, loc, size, dest.ToIdentifier(), newVersion, prevVersion, offset, src); } -ExprId MediumLevelILFunction::SetVarSSASplit(size_t size, const SSAVariable& high, const SSAVariable& low, - ExprId src, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SetVarSSASplit( + size_t size, const SSAVariable& high, const SSAVariable& low, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SET_VAR_SPLIT_SSA, loc, size, high.var.ToIdentifier(), high.version, - low.var.ToIdentifier(), low.version, src); + low.var.ToIdentifier(), low.version, src); } -ExprId MediumLevelILFunction::SetVarAliased(size_t size, const Variable& dest, - size_t newMemVersion, size_t prevMemVersion, - ExprId src, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SetVarAliased(size_t size, const Variable& dest, size_t newMemVersion, + size_t prevMemVersion, ExprId src, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_SET_VAR_ALIASED, loc, size, dest.ToIdentifier(), - newMemVersion, prevMemVersion, src); + return AddExprWithLocation( + MLIL_SET_VAR_ALIASED, loc, size, dest.ToIdentifier(), newMemVersion, prevMemVersion, src); } -ExprId MediumLevelILFunction::SetVarAliasedField(size_t size, const Variable& dest, - size_t newMemVersion, size_t prevMemVersion, - uint64_t offset, ExprId src, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SetVarAliasedField(size_t size, const Variable& dest, size_t newMemVersion, + size_t prevMemVersion, uint64_t offset, ExprId src, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_SET_VAR_ALIASED_FIELD, loc, size, dest.ToIdentifier(), - newMemVersion, prevMemVersion, offset, src); + return AddExprWithLocation( + MLIL_SET_VAR_ALIASED_FIELD, loc, size, dest.ToIdentifier(), newMemVersion, prevMemVersion, offset, src); } @@ -2198,111 +2164,103 @@ ExprId MediumLevelILFunction::Load(size_t size, ExprId src, const ILSourceLocati } -ExprId MediumLevelILFunction::LoadStruct(size_t size, ExprId src, uint64_t offset, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::LoadStruct(size_t size, ExprId src, uint64_t offset, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_LOAD_STRUCT, loc, size, src, offset); } -ExprId MediumLevelILFunction::LoadSSA(size_t size, ExprId src, size_t memVersion, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::LoadSSA(size_t size, ExprId src, size_t memVersion, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_LOAD_SSA, loc, size, src, memVersion); } -ExprId MediumLevelILFunction::LoadStructSSA(size_t size, ExprId src, uint64_t offset, size_t memVersion, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::LoadStructSSA( + size_t size, ExprId src, uint64_t offset, size_t memVersion, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_LOAD_STRUCT_SSA, loc, size, src, offset, memVersion); } -ExprId MediumLevelILFunction::Store(size_t size, ExprId dest, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::Store(size_t size, ExprId dest, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_STORE, loc, size, dest, src); } -ExprId MediumLevelILFunction::StoreStruct(size_t size, ExprId dest, uint64_t offset, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::StoreStruct( + size_t size, ExprId dest, uint64_t offset, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_STORE_STRUCT, loc, size, dest, offset, src); } -ExprId MediumLevelILFunction::StoreSSA(size_t size, ExprId dest, - size_t newMemVersion, size_t prevMemVersion, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::StoreSSA( + size_t size, ExprId dest, size_t newMemVersion, size_t prevMemVersion, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_STORE_SSA, loc, size, dest, newMemVersion, prevMemVersion, src); } -ExprId MediumLevelILFunction::StoreStructSSA(size_t size, ExprId dest, uint64_t offset, - size_t newMemVersion, size_t prevMemVersion, ExprId src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::StoreStructSSA(size_t size, ExprId dest, uint64_t offset, size_t newMemVersion, + size_t prevMemVersion, ExprId src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_STORE_STRUCT_SSA, loc, size, dest, offset, newMemVersion, prevMemVersion, src); } -ExprId MediumLevelILFunction::Var(size_t size, const Variable& src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::Var(size_t size, const Variable& src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_VAR, loc, size, src.ToIdentifier()); } -ExprId MediumLevelILFunction::VarField(size_t size, const Variable& src, uint64_t offset, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::VarField(size_t size, const Variable& src, uint64_t offset, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_VAR_FIELD, loc, size, src.ToIdentifier(), offset); } -ExprId MediumLevelILFunction::VarSplit(size_t size, const Variable& high, const Variable& low, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::VarSplit( + size_t size, const Variable& high, const Variable& low, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_VAR_SPLIT, loc, size, high.ToIdentifier(), low.ToIdentifier()); } -ExprId MediumLevelILFunction::VarSSA(size_t size, const SSAVariable& src, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::VarSSA(size_t size, const SSAVariable& src, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_VAR_SSA, loc, size, src.var.ToIdentifier(), src.version); } -ExprId MediumLevelILFunction::VarSSAField(size_t size, const SSAVariable& src, uint64_t offset, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::VarSSAField( + size_t size, const SSAVariable& src, uint64_t offset, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_VAR_SSA_FIELD, loc, size, src.var.ToIdentifier(), src.version, offset); } -ExprId MediumLevelILFunction::VarAliased(size_t size, const Variable& src, size_t memVersion, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::VarAliased( + size_t size, const Variable& src, size_t memVersion, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_VAR_ALIASED, loc, size, src.ToIdentifier(), memVersion); } -ExprId MediumLevelILFunction::VarAliasedField(size_t size, const Variable& src, - size_t memVersion, uint64_t offset, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::VarAliasedField( + size_t size, const Variable& src, size_t memVersion, uint64_t offset, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_VAR_ALIASED_FIELD, loc, size, src.ToIdentifier(), memVersion, offset); } -ExprId MediumLevelILFunction::VarSplitSSA(size_t size, const SSAVariable& high, const SSAVariable& low, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::VarSplitSSA( + size_t size, const SSAVariable& high, const SSAVariable& low, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_VAR_SPLIT_SSA, loc, size, high.var.ToIdentifier(), high.version, - low.var.ToIdentifier(), low.version); + return AddExprWithLocation( + MLIL_VAR_SPLIT_SSA, loc, size, high.var.ToIdentifier(), high.version, low.var.ToIdentifier(), low.version); } @@ -2312,8 +2270,7 @@ ExprId MediumLevelILFunction::AddressOf(const Variable& var, const ILSourceLocat } -ExprId MediumLevelILFunction::AddressOfField(const Variable& var, uint64_t offset, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::AddressOfField(const Variable& var, uint64_t offset, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_ADDRESS_OF_FIELD, loc, 0, var.ToIdentifier(), offset); } @@ -2379,8 +2336,8 @@ ExprId MediumLevelILFunction::Add(size_t size, ExprId left, ExprId right, const } -ExprId MediumLevelILFunction::AddWithCarry(size_t size, ExprId left, ExprId right, ExprId carry, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::AddWithCarry( + size_t size, ExprId left, ExprId right, ExprId carry, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_ADC, loc, size, left, right, carry); } @@ -2392,8 +2349,8 @@ ExprId MediumLevelILFunction::Sub(size_t size, ExprId left, ExprId right, const } -ExprId MediumLevelILFunction::SubWithBorrow(size_t size, ExprId left, ExprId right, ExprId carry, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SubWithBorrow( + size_t size, ExprId left, ExprId right, ExprId carry, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SBB, loc, size, left, right, carry); } @@ -2417,127 +2374,112 @@ ExprId MediumLevelILFunction::Xor(size_t size, ExprId left, ExprId right, const } -ExprId MediumLevelILFunction::ShiftLeft(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::ShiftLeft(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_LSL, loc, size, left, right); } -ExprId MediumLevelILFunction::LogicalShiftRight(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::LogicalShiftRight(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_LSR, loc, size, left, right); } -ExprId MediumLevelILFunction::ArithShiftRight(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::ArithShiftRight(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_ASR, loc, size, left, right); } -ExprId MediumLevelILFunction::RotateLeft(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::RotateLeft(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_ROL, loc, size, left, right); } -ExprId MediumLevelILFunction::RotateLeftCarry(size_t size, ExprId left, ExprId right, ExprId carry, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::RotateLeftCarry( + size_t size, ExprId left, ExprId right, ExprId carry, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_RLC, loc, size, left, right, carry); } -ExprId MediumLevelILFunction::RotateRight(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::RotateRight(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_ROR, loc, size, left, right); } -ExprId MediumLevelILFunction::RotateRightCarry(size_t size, ExprId left, ExprId right, ExprId carry, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::RotateRightCarry( + size_t size, ExprId left, ExprId right, ExprId carry, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_RRC, loc, size, left, right, carry); } -ExprId MediumLevelILFunction::Mult(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::Mult(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_MUL, loc, size, left, right); } -ExprId MediumLevelILFunction::MultDoublePrecSigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::MultDoublePrecSigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_MULS_DP, loc, size, left, right); } -ExprId MediumLevelILFunction::MultDoublePrecUnsigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::MultDoublePrecUnsigned( + size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_MULU_DP, loc, size, left, right); } -ExprId MediumLevelILFunction::DivSigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::DivSigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_DIVS, loc, size, left, right); } -ExprId MediumLevelILFunction::DivUnsigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::DivUnsigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_DIVU, loc, size, left, right); } -ExprId MediumLevelILFunction::DivDoublePrecSigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::DivDoublePrecSigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_DIVS_DP, loc, size, left, right); } -ExprId MediumLevelILFunction::DivDoublePrecUnsigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::DivDoublePrecUnsigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_DIVU_DP, loc, size, left, right); } -ExprId MediumLevelILFunction::ModSigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::ModSigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_MODS, loc, size, left, right); } -ExprId MediumLevelILFunction::ModUnsigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::ModUnsigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_MODU, loc, size, left, right); } -ExprId MediumLevelILFunction::ModDoublePrecSigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::ModDoublePrecSigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_MODS_DP, loc, size, left, right); } -ExprId MediumLevelILFunction::ModDoublePrecUnsigned(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::ModDoublePrecUnsigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_MODU_DP, loc, size, left, right); } @@ -2579,8 +2521,8 @@ ExprId MediumLevelILFunction::Jump(ExprId dest, const ILSourceLocation& loc) } -ExprId MediumLevelILFunction::JumpTo(ExprId dest, const map<uint64_t, BNMediumLevelILLabel*>& targets, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::JumpTo( + ExprId dest, const map<uint64_t, BNMediumLevelILLabel*>& targets, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_JUMP_TO, loc, 0, dest, targets.size() * 2, AddLabelMap(targets)); } @@ -2592,120 +2534,115 @@ ExprId MediumLevelILFunction::ReturnHint(ExprId dest, const ILSourceLocation& lo } -ExprId MediumLevelILFunction::Call(const vector<Variable>& output, ExprId dest, - const vector<ExprId>& params, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::Call( + const vector<Variable>& output, ExprId dest, const vector<ExprId>& params, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_CALL, loc, 0, output.size(), AddVariableList(output), dest, - params.size(), AddOperandList(params)); + return AddExprWithLocation( + MLIL_CALL, loc, 0, output.size(), AddVariableList(output), dest, params.size(), AddOperandList(params)); } -ExprId MediumLevelILFunction::CallUntyped(const vector<Variable>& output, ExprId dest, - const vector<Variable>& params, ExprId stack, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CallUntyped(const vector<Variable>& output, ExprId dest, const vector<Variable>& params, + ExprId stack, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CALL_UNTYPED, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT, loc, 0, output.size(), AddVariableList(output)), dest, - AddExprWithLocation(MLIL_CALL_PARAM, loc, 0, params.size(), AddVariableList(params)), stack); + AddExprWithLocation(MLIL_CALL_OUTPUT, loc, 0, output.size(), AddVariableList(output)), dest, + AddExprWithLocation(MLIL_CALL_PARAM, loc, 0, params.size(), AddVariableList(params)), stack); } -ExprId MediumLevelILFunction::Syscall(const vector<Variable>& output, const vector<ExprId>& params, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::Syscall( + const vector<Variable>& output, const vector<ExprId>& params, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_SYSCALL, loc, 0, output.size(), AddVariableList(output), - params.size(), AddOperandList(params)); + return AddExprWithLocation( + MLIL_SYSCALL, loc, 0, output.size(), AddVariableList(output), params.size(), AddOperandList(params)); } -ExprId MediumLevelILFunction::SyscallUntyped(const vector<Variable>& output, const vector<Variable>& params, - ExprId stack, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SyscallUntyped( + const vector<Variable>& output, const vector<Variable>& params, ExprId stack, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SYSCALL_UNTYPED, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT, loc, 0, output.size(), AddVariableList(output)), - AddExprWithLocation(MLIL_CALL_PARAM, loc, 0, params.size(), AddVariableList(params)), stack); + AddExprWithLocation(MLIL_CALL_OUTPUT, loc, 0, output.size(), AddVariableList(output)), + AddExprWithLocation(MLIL_CALL_PARAM, loc, 0, params.size(), AddVariableList(params)), stack); } -ExprId MediumLevelILFunction::TailCall(const vector<Variable>& output, ExprId dest, - const vector<ExprId>& params, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::TailCall( + const vector<Variable>& output, ExprId dest, const vector<ExprId>& params, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_TAILCALL, loc, 0, output.size(), AddVariableList(output), dest, - params.size(), AddOperandList(params)); + return AddExprWithLocation( + MLIL_TAILCALL, loc, 0, output.size(), AddVariableList(output), dest, params.size(), AddOperandList(params)); } ExprId MediumLevelILFunction::TailCallUntyped(const vector<Variable>& output, ExprId dest, - const vector<Variable>& params, ExprId stack, const ILSourceLocation& loc) + const vector<Variable>& params, ExprId stack, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_TAILCALL_UNTYPED, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT, loc, 0, output.size(), AddVariableList(output)), dest, - AddExprWithLocation(MLIL_CALL_PARAM, loc, 0, params.size(), AddVariableList(params)), stack); + AddExprWithLocation(MLIL_CALL_OUTPUT, loc, 0, output.size(), AddVariableList(output)), dest, + AddExprWithLocation(MLIL_CALL_PARAM, loc, 0, params.size(), AddVariableList(params)), stack); } ExprId MediumLevelILFunction::CallSSA(const vector<SSAVariable>& output, ExprId dest, const vector<ExprId>& params, - size_t newMemVersion, size_t prevMemVersion, const ILSourceLocation& loc) + size_t newMemVersion, size_t prevMemVersion, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CALL_SSA, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, - output.size() * 2, AddSSAVariableList(output)), dest, - params.size(), AddOperandList(params), prevMemVersion); + AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, output.size() * 2, AddSSAVariableList(output)), + dest, params.size(), AddOperandList(params), prevMemVersion); } ExprId MediumLevelILFunction::CallUntypedSSA(const vector<SSAVariable>& output, ExprId dest, - const vector<SSAVariable>& params, size_t newMemVersion, size_t prevMemVersion, - ExprId stack, const ILSourceLocation& loc) + const vector<SSAVariable>& params, size_t newMemVersion, size_t prevMemVersion, ExprId stack, + const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CALL_UNTYPED_SSA, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, - output.size() * 2, AddSSAVariableList(output)), dest, - AddExprWithLocation(MLIL_CALL_PARAM_SSA, loc, 0, prevMemVersion, - params.size() * 2, AddSSAVariableList(params)), stack); + AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, output.size() * 2, AddSSAVariableList(output)), + dest, + AddExprWithLocation(MLIL_CALL_PARAM_SSA, loc, 0, prevMemVersion, params.size() * 2, AddSSAVariableList(params)), + stack); } ExprId MediumLevelILFunction::SyscallSSA(const vector<SSAVariable>& output, const vector<ExprId>& params, - size_t newMemVersion, size_t prevMemVersion, const ILSourceLocation& loc) + size_t newMemVersion, size_t prevMemVersion, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SYSCALL_SSA, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, - output.size() * 2, AddSSAVariableList(output)), - params.size(), AddOperandList(params), prevMemVersion); + AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, output.size() * 2, AddSSAVariableList(output)), + params.size(), AddOperandList(params), prevMemVersion); } -ExprId MediumLevelILFunction::SyscallUntypedSSA(const vector<SSAVariable>& output, - const vector<SSAVariable>& params, size_t newMemVersion, size_t prevMemVersion, - ExprId stack, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::SyscallUntypedSSA(const vector<SSAVariable>& output, const vector<SSAVariable>& params, + size_t newMemVersion, size_t prevMemVersion, ExprId stack, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_SYSCALL_UNTYPED_SSA, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, - output.size() * 2, AddSSAVariableList(output)), - AddExprWithLocation(MLIL_CALL_PARAM_SSA, loc, 0, prevMemVersion, - params.size() * 2, AddSSAVariableList(params)), stack); + AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, output.size() * 2, AddSSAVariableList(output)), + AddExprWithLocation(MLIL_CALL_PARAM_SSA, loc, 0, prevMemVersion, params.size() * 2, AddSSAVariableList(params)), + stack); } ExprId MediumLevelILFunction::TailCallSSA(const vector<SSAVariable>& output, ExprId dest, const vector<ExprId>& params, - size_t newMemVersion, size_t prevMemVersion, const ILSourceLocation& loc) + size_t newMemVersion, size_t prevMemVersion, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_TAILCALL_SSA, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, - output.size() * 2, AddSSAVariableList(output)), dest, - params.size(), AddOperandList(params), prevMemVersion); + AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, output.size() * 2, AddSSAVariableList(output)), + dest, params.size(), AddOperandList(params), prevMemVersion); } ExprId MediumLevelILFunction::TailCallUntypedSSA(const vector<SSAVariable>& output, ExprId dest, - const vector<SSAVariable>& params, size_t newMemVersion, size_t prevMemVersion, - ExprId stack, const ILSourceLocation& loc) + const vector<SSAVariable>& params, size_t newMemVersion, size_t prevMemVersion, ExprId stack, + const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_TAILCALL_UNTYPED_SSA, loc, 0, - AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, - output.size() * 2, AddSSAVariableList(output)), dest, - AddExprWithLocation(MLIL_CALL_PARAM_SSA, loc, 0, prevMemVersion, - params.size() * 2, AddSSAVariableList(params)), stack); + AddExprWithLocation(MLIL_CALL_OUTPUT_SSA, loc, 0, newMemVersion, output.size() * 2, AddSSAVariableList(output)), + dest, + AddExprWithLocation(MLIL_CALL_PARAM_SSA, loc, 0, prevMemVersion, params.size() * 2, AddSSAVariableList(params)), + stack); } @@ -2721,78 +2658,74 @@ ExprId MediumLevelILFunction::NoReturn(const ILSourceLocation& loc) } -ExprId MediumLevelILFunction::CompareEqual(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareEqual(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_E, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareNotEqual(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareNotEqual(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_NE, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareSignedLessThan(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareSignedLessThan(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_SLT, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareUnsignedLessThan(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareUnsignedLessThan( + size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_ULT, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareSignedLessEqual(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareSignedLessEqual( + size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_SLE, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareUnsignedLessEqual(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareUnsignedLessEqual( + size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_ULE, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareSignedGreaterEqual(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareSignedGreaterEqual( + size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_SGE, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareUnsignedGreaterEqual(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareUnsignedGreaterEqual( + size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_UGE, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareSignedGreaterThan(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareSignedGreaterThan( + size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_SGT, loc, size, left, right); } -ExprId MediumLevelILFunction::CompareUnsignedGreaterThan(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::CompareUnsignedGreaterThan( + size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_CMP_UGT, loc, size, left, right); } -ExprId MediumLevelILFunction::TestBit(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::TestBit(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_TEST_BIT, loc, size, left, right); } @@ -2804,8 +2737,7 @@ ExprId MediumLevelILFunction::BoolToInt(size_t size, ExprId src, const ILSourceL } -ExprId MediumLevelILFunction::AddOverflow(size_t size, ExprId left, ExprId right, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::AddOverflow(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_ADD_OVERFLOW, loc, size, left, right); } @@ -2823,19 +2755,19 @@ ExprId MediumLevelILFunction::Trap(int64_t vector, const ILSourceLocation& loc) } -ExprId MediumLevelILFunction::Intrinsic(const vector<Variable>& outputs, uint32_t intrinsic, - const vector<ExprId>& params, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::Intrinsic( + const vector<Variable>& outputs, uint32_t intrinsic, const vector<ExprId>& params, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_INTRINSIC, loc, 0, outputs.size(), AddVariableList(outputs), - intrinsic, params.size(), AddOperandList(params)); + return AddExprWithLocation(MLIL_INTRINSIC, loc, 0, outputs.size(), AddVariableList(outputs), intrinsic, + params.size(), AddOperandList(params)); } -ExprId MediumLevelILFunction::IntrinsicSSA(const vector<SSAVariable>& outputs, uint32_t intrinsic, - const vector<ExprId>& params, const ILSourceLocation& loc) +ExprId MediumLevelILFunction::IntrinsicSSA( + const vector<SSAVariable>& outputs, uint32_t intrinsic, const vector<ExprId>& params, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_INTRINSIC_SSA, loc, 0, outputs.size() * 2, AddSSAVariableList(outputs), - intrinsic, params.size(), AddOperandList(params)); + return AddExprWithLocation(MLIL_INTRINSIC_SSA, loc, 0, outputs.size() * 2, AddSSAVariableList(outputs), intrinsic, + params.size(), AddOperandList(params)); } @@ -2845,8 +2777,8 @@ ExprId MediumLevelILFunction::FreeVarSlot(const Variable& var, const ILSourceLoc } -ExprId MediumLevelILFunction::FreeVarSlotSSA(const Variable& var, size_t newVersion, size_t prevVersion, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::FreeVarSlotSSA( + const Variable& var, size_t newVersion, size_t prevVersion, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_FREE_VAR_SLOT_SSA, loc, 0, var.ToIdentifier(), newVersion, prevVersion); } @@ -2864,26 +2796,25 @@ ExprId MediumLevelILFunction::Unimplemented(const ILSourceLocation& loc) } -ExprId MediumLevelILFunction::UnimplementedMemoryRef(size_t size, ExprId target, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::UnimplementedMemoryRef(size_t size, ExprId target, const ILSourceLocation& loc) { return AddExprWithLocation(MLIL_UNIMPL_MEM, loc, size, target); } -ExprId MediumLevelILFunction::VarPhi(const SSAVariable& dest, const vector<SSAVariable>& sources, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::VarPhi( + const SSAVariable& dest, const vector<SSAVariable>& sources, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_VAR_PHI, loc, 0, dest.var.ToIdentifier(), dest.version, - sources.size() * 2, AddSSAVariableList(sources)); + return AddExprWithLocation( + MLIL_VAR_PHI, loc, 0, dest.var.ToIdentifier(), dest.version, sources.size() * 2, AddSSAVariableList(sources)); } -ExprId MediumLevelILFunction::MemoryPhi(size_t destMemVersion, const vector<size_t>& sourceMemVersions, - const ILSourceLocation& loc) +ExprId MediumLevelILFunction::MemoryPhi( + size_t destMemVersion, const vector<size_t>& sourceMemVersions, const ILSourceLocation& loc) { - return AddExprWithLocation(MLIL_MEM_PHI, loc, 0, destMemVersion, - sourceMemVersions.size(), AddIndexList(sourceMemVersions)); + return AddExprWithLocation( + MLIL_MEM_PHI, loc, 0, destMemVersion, sourceMemVersions.size(), AddIndexList(sourceMemVersions)); } |
