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.h | |
| parent | 519c9db22367f2659d1a54599fab47e6313be06e (diff) | |
Format All Files
Diffstat (limited to 'mediumlevelilinstruction.h')
| -rw-r--r-- | mediumlevelilinstruction.h | 1032 |
1 files changed, 758 insertions, 274 deletions
diff --git a/mediumlevelilinstruction.h b/mediumlevelilinstruction.h index 1d3d2689..7e6194a7 100644 --- a/mediumlevelilinstruction.h +++ b/mediumlevelilinstruction.h @@ -24,9 +24,9 @@ #include <unordered_map> #include <vector> #ifdef BINARYNINJACORE_LIBRARY -#include "variable.h" + #include "variable.h" #else -#include "binaryninjaapi.h" + #include "binaryninjaapi.h" #endif #ifdef BINARYNINJACORE_LIBRARY @@ -38,7 +38,8 @@ namespace BinaryNinja class MediumLevelILFunction; template <BNMediumLevelILOperation N> - struct MediumLevelILInstructionAccessor {}; + struct MediumLevelILInstructionAccessor + {}; struct MediumLevelILInstruction; struct MediumLevelILConstantInstruction; @@ -122,14 +123,15 @@ namespace BinaryNinja ParameterSSAMemoryVersionMediumLevelOperandUsage, SourceSSAVariablesMediumLevelOperandUsages }; -} +} // namespace BinaryNinjaCore -namespace std -{ +namespace std { #ifdef BINARYNINJACORE_LIBRARY - template<> struct hash<BinaryNinjaCore::SSAVariable> + template <> + struct hash<BinaryNinjaCore::SSAVariable> #else - template<> struct hash<BinaryNinja::SSAVariable> + template <> + struct hash<BinaryNinja::SSAVariable> #endif { #ifdef BINARYNINJACORE_LIBRARY @@ -143,20 +145,20 @@ namespace std } }; - template<> struct hash<BNMediumLevelILOperation> + template <> + struct hash<BNMediumLevelILOperation> { typedef BNMediumLevelILOperation argument_type; typedef int result_type; - result_type operator()(argument_type const& value) const - { - return (result_type)value; - } + result_type operator()(argument_type const& value) const { return (result_type)value; } }; #ifdef BINARYNINJACORE_LIBRARY - template<> struct hash<BinaryNinjaCore::MediumLevelILOperandUsage> + template <> + struct hash<BinaryNinjaCore::MediumLevelILOperandUsage> #else - template<> struct hash<BinaryNinja::MediumLevelILOperandUsage> + template <> + struct hash<BinaryNinja::MediumLevelILOperandUsage> #endif { #ifdef BINARYNINJACORE_LIBRARY @@ -165,12 +167,9 @@ namespace std typedef BinaryNinja::MediumLevelILOperandUsage argument_type; #endif typedef int result_type; - result_type operator()(argument_type const& value) const - { - return (result_type)value; - } + result_type operator()(argument_type const& value) const { return (result_type)value; } }; -} +} // namespace std #ifdef BINARYNINJACORE_LIBRARY namespace BinaryNinjaCore @@ -179,21 +178,21 @@ namespace BinaryNinja #endif { #ifdef BINARYNINJACORE_LIBRARY -#define _STD_VECTOR vector -#define _STD_SET set -#define _STD_UNORDERED_MAP unordered_map -#define _STD_MAP map + #define _STD_VECTOR vector + #define _STD_SET set + #define _STD_UNORDERED_MAP unordered_map + #define _STD_MAP map #else -#define _STD_VECTOR std::vector -#define _STD_SET std::set -#define _STD_UNORDERED_MAP std::unordered_map -#define _STD_MAP std::map + #define _STD_VECTOR std::vector + #define _STD_SET std::set + #define _STD_UNORDERED_MAP std::unordered_map + #define _STD_MAP std::map #endif - class MediumLevelILInstructionAccessException: public std::exception + class MediumLevelILInstructionAccessException : public std::exception { - public: - MediumLevelILInstructionAccessException(): std::exception() {} + public: + MediumLevelILInstructionAccessException() : std::exception() {} virtual const char* what() const NOEXCEPT { return "invalid access to MLIL instruction"; } }; @@ -219,7 +218,7 @@ namespace BinaryNinja ListIterator m_start; - public: + public: typedef ListIterator const_iterator; MediumLevelILIntegerList(MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count); @@ -240,13 +239,17 @@ namespace BinaryNinja bool operator==(const ListIterator& a) const { return pos == a.pos; } bool operator!=(const ListIterator& a) const { return pos != a.pos; } bool operator<(const ListIterator& a) const { return pos < a.pos; } - ListIterator& operator++() { ++pos; return *this; } + ListIterator& operator++() + { + ++pos; + return *this; + } size_t operator*(); }; MediumLevelILIntegerList m_list; - public: + public: typedef ListIterator const_iterator; MediumLevelILIndexList(MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count); @@ -267,13 +270,18 @@ namespace BinaryNinja bool operator==(const ListIterator& a) const { return pos == a.pos; } bool operator!=(const ListIterator& a) const { return pos != a.pos; } bool operator<(const ListIterator& a) const { return pos < a.pos; } - ListIterator& operator++() { ++pos; ++pos; return *this; } + ListIterator& operator++() + { + ++pos; + ++pos; + return *this; + } const std::pair<uint64_t, size_t> operator*(); }; MediumLevelILIntegerList m_list; - public: + public: typedef ListIterator const_iterator; MediumLevelILIndexMap(MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count); @@ -294,13 +302,17 @@ namespace BinaryNinja bool operator==(const ListIterator& a) const { return pos == a.pos; } bool operator!=(const ListIterator& a) const { return pos != a.pos; } bool operator<(const ListIterator& a) const { return pos < a.pos; } - ListIterator& operator++() { ++pos; return *this; } + ListIterator& operator++() + { + ++pos; + return *this; + } const Variable operator*(); }; MediumLevelILIntegerList m_list; - public: + public: typedef ListIterator const_iterator; MediumLevelILVariableList(MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count); @@ -321,16 +333,22 @@ namespace BinaryNinja bool operator==(const ListIterator& a) const { return pos == a.pos; } bool operator!=(const ListIterator& a) const { return pos != a.pos; } bool operator<(const ListIterator& a) const { return pos < a.pos; } - ListIterator& operator++() { ++pos; ++pos; return *this; } + ListIterator& operator++() + { + ++pos; + ++pos; + return *this; + } const SSAVariable operator*(); }; MediumLevelILIntegerList m_list; - public: + public: typedef ListIterator const_iterator; - MediumLevelILSSAVariableList(MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count); + MediumLevelILSSAVariableList( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count); const_iterator begin() const; const_iterator end() const; @@ -349,18 +367,22 @@ namespace BinaryNinja bool operator==(const ListIterator& a) const { return pos == a.pos; } bool operator!=(const ListIterator& a) const { return pos != a.pos; } bool operator<(const ListIterator& a) const { return pos < a.pos; } - ListIterator& operator++() { ++pos; return *this; } + ListIterator& operator++() + { + ++pos; + return *this; + } const MediumLevelILInstruction operator*(); }; MediumLevelILIntegerList m_list; size_t m_instructionIndex; - public: + public: typedef ListIterator const_iterator; MediumLevelILInstructionList(MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t count, - size_t instructionIndex); + size_t instructionIndex); const_iterator begin() const; const_iterator end() const; @@ -370,7 +392,7 @@ namespace BinaryNinja operator _STD_VECTOR<MediumLevelILInstruction>() const; }; - struct MediumLevelILInstructionBase: public BNMediumLevelILInstruction + struct MediumLevelILInstructionBase : public BNMediumLevelILInstruction { #ifdef BINARYNINJACORE_LIBRARY MediumLevelILFunction* function; @@ -380,10 +402,10 @@ namespace BinaryNinja size_t exprIndex, instructionIndex; static _STD_UNORDERED_MAP<MediumLevelILOperandUsage, MediumLevelILOperandType> operandTypeForUsage; - static _STD_UNORDERED_MAP<BNMediumLevelILOperation, - _STD_VECTOR<MediumLevelILOperandUsage>> operationOperandUsage; - static _STD_UNORDERED_MAP<BNMediumLevelILOperation, - _STD_UNORDERED_MAP<MediumLevelILOperandUsage, size_t>> operationOperandIndex; + static _STD_UNORDERED_MAP<BNMediumLevelILOperation, _STD_VECTOR<MediumLevelILOperandUsage>> + operationOperandUsage; + static _STD_UNORDERED_MAP<BNMediumLevelILOperation, _STD_UNORDERED_MAP<MediumLevelILOperandUsage, size_t>> + operationOperandIndex; MediumLevelILOperandList GetOperands() const; @@ -405,8 +427,8 @@ namespace BinaryNinja void UpdateRawOperandAsExprList(size_t operandIndex, const _STD_VECTOR<size_t>& exprs); RegisterValue GetValue() const; - PossibleValueSet GetPossibleValues(const _STD_SET<BNDataFlowQueryOption>& options = - _STD_SET<BNDataFlowQueryOption>()) const; + PossibleValueSet GetPossibleValues( + const _STD_SET<BNDataFlowQueryOption>& options = _STD_SET<BNDataFlowQueryOption>()) const; Confidence<Ref<Type>> GetType() const; size_t GetSSAVarVersion(const Variable& var); @@ -459,14 +481,8 @@ namespace BinaryNinja throw MediumLevelILInstructionAccessException(); return *(MediumLevelILInstructionAccessor<N>*)this; } - MediumLevelILOneOperandInstruction& AsOneOperand() - { - return *(MediumLevelILOneOperandInstruction*)this; - } - MediumLevelILTwoOperandInstruction& AsTwoOperand() - { - return *(MediumLevelILTwoOperandInstruction*)this; - } + MediumLevelILOneOperandInstruction& AsOneOperand() { return *(MediumLevelILOneOperandInstruction*)this; } + MediumLevelILTwoOperandInstruction& AsTwoOperand() { return *(MediumLevelILTwoOperandInstruction*)this; } MediumLevelILTwoOperandWithCarryInstruction& AsTwoOperandWithCarry() { return *(MediumLevelILTwoOperandWithCarryInstruction*)this; @@ -497,66 +513,246 @@ namespace BinaryNinja } }; - struct MediumLevelILInstruction: public MediumLevelILInstructionBase + struct MediumLevelILInstruction : public MediumLevelILInstructionBase { MediumLevelILInstruction(); - MediumLevelILInstruction(MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, - size_t expr, size_t instrIdx); + MediumLevelILInstruction( + MediumLevelILFunction* func, const BNMediumLevelILInstruction& instr, size_t expr, size_t instrIdx); MediumLevelILInstruction(const MediumLevelILInstructionBase& instr); void VisitExprs(const std::function<bool(const MediumLevelILInstruction& expr)>& func) const; ExprId CopyTo(MediumLevelILFunction* dest) const; ExprId CopyTo(MediumLevelILFunction* dest, - const std::function<ExprId(const MediumLevelILInstruction& subExpr)>& subExprHandler) const; + const std::function<ExprId(const MediumLevelILInstruction& subExpr)>& subExprHandler) const; // Templated accessors for instruction operands, use these for efficient access to a known instruction - template <BNMediumLevelILOperation N> MediumLevelILInstruction GetSourceExpr() const { return As<N>().GetSourceExpr(); } - template <BNMediumLevelILOperation N> Variable GetSourceVariable() const { return As<N>().GetSourceVariable(); } - template <BNMediumLevelILOperation N> SSAVariable GetSourceSSAVariable() const { return As<N>().GetSourceSSAVariable(); } - template <BNMediumLevelILOperation N> MediumLevelILInstruction GetDestExpr() const { return As<N>().GetDestExpr(); } - template <BNMediumLevelILOperation N> Variable GetDestVariable() const { return As<N>().GetDestVariable(); } - template <BNMediumLevelILOperation N> SSAVariable GetDestSSAVariable() const { return As<N>().GetDestSSAVariable(); } - template <BNMediumLevelILOperation N> MediumLevelILInstruction GetLeftExpr() const { return As<N>().GetLeftExpr(); } - template <BNMediumLevelILOperation N> MediumLevelILInstruction GetRightExpr() const { return As<N>().GetRightExpr(); } - template <BNMediumLevelILOperation N> MediumLevelILInstruction GetCarryExpr() const { return As<N>().GetCarryExpr(); } - template <BNMediumLevelILOperation N> MediumLevelILInstruction GetStackExpr() const { return As<N>().GetStackExpr(); } - template <BNMediumLevelILOperation N> MediumLevelILInstruction GetConditionExpr() const { return As<N>().GetConditionExpr(); } - template <BNMediumLevelILOperation N> Variable GetHighVariable() const { return As<N>().GetHighVariable(); } - template <BNMediumLevelILOperation N> Variable GetLowVariable() const { return As<N>().GetLowVariable(); } - template <BNMediumLevelILOperation N> SSAVariable GetHighSSAVariable() const { return As<N>().GetHighSSAVariable(); } - template <BNMediumLevelILOperation N> SSAVariable GetLowSSAVariable() const { return As<N>().GetLowSSAVariable(); } - template <BNMediumLevelILOperation N> uint64_t GetOffset() const { return As<N>().GetOffset(); } - template <BNMediumLevelILOperation N> int64_t GetConstant() const { return As<N>().GetConstant(); } - template <BNMediumLevelILOperation N> int64_t GetVector() const { return As<N>().GetVector(); } - template <BNMediumLevelILOperation N> uint32_t GetIntrinsic() const { return As<N>().GetIntrinsic(); } - template <BNMediumLevelILOperation N> size_t GetTarget() const { return As<N>().GetTarget(); } - template <BNMediumLevelILOperation N> size_t GetTrueTarget() const { return As<N>().GetTrueTarget(); } - template <BNMediumLevelILOperation N> size_t GetFalseTarget() const { return As<N>().GetFalseTarget(); } - template <BNMediumLevelILOperation N> size_t GetDestMemoryVersion() const { return As<N>().GetDestMemoryVersion(); } - template <BNMediumLevelILOperation N> size_t GetSourceMemoryVersion() const { return As<N>().GetSourceMemoryVersion(); } - template <BNMediumLevelILOperation N> MediumLevelILIndexMap GetTargets() const { return As<N>().GetTargets(); } - template <BNMediumLevelILOperation N> MediumLevelILIndexList GetSourceMemoryVersions() const { return As<N>().GetSourceMemoryVersions(); } - template <BNMediumLevelILOperation N> MediumLevelILVariableList GetOutputVariables() const { return As<N>().GetOutputVariables(); } - template <BNMediumLevelILOperation N> MediumLevelILSSAVariableList GetOutputSSAVariables() const { return As<N>().GetOutputSSAVariables(); } - template <BNMediumLevelILOperation N> MediumLevelILInstructionList GetParameterExprs() const { return As<N>().GetParameterExprs(); } - template <BNMediumLevelILOperation N> MediumLevelILInstructionList GetSourceExprs() const { return As<N>().GetSourceExprs(); } - template <BNMediumLevelILOperation N> MediumLevelILVariableList GetParameterVariables() const { return As<N>().GetParameterVariables(); } - template <BNMediumLevelILOperation N> MediumLevelILSSAVariableList GetParameterSSAVariables() const { return As<N>().GetParameterSSAVariables(); } - template <BNMediumLevelILOperation N> MediumLevelILSSAVariableList GetSourceSSAVariables() const { return As<N>().GetSourceSSAVariables(); } + template <BNMediumLevelILOperation N> + MediumLevelILInstruction GetSourceExpr() const + { + return As<N>().GetSourceExpr(); + } + template <BNMediumLevelILOperation N> + Variable GetSourceVariable() const + { + return As<N>().GetSourceVariable(); + } + template <BNMediumLevelILOperation N> + SSAVariable GetSourceSSAVariable() const + { + return As<N>().GetSourceSSAVariable(); + } + template <BNMediumLevelILOperation N> + MediumLevelILInstruction GetDestExpr() const + { + return As<N>().GetDestExpr(); + } + template <BNMediumLevelILOperation N> + Variable GetDestVariable() const + { + return As<N>().GetDestVariable(); + } + template <BNMediumLevelILOperation N> + SSAVariable GetDestSSAVariable() const + { + return As<N>().GetDestSSAVariable(); + } + template <BNMediumLevelILOperation N> + MediumLevelILInstruction GetLeftExpr() const + { + return As<N>().GetLeftExpr(); + } + template <BNMediumLevelILOperation N> + MediumLevelILInstruction GetRightExpr() const + { + return As<N>().GetRightExpr(); + } + template <BNMediumLevelILOperation N> + MediumLevelILInstruction GetCarryExpr() const + { + return As<N>().GetCarryExpr(); + } + template <BNMediumLevelILOperation N> + MediumLevelILInstruction GetStackExpr() const + { + return As<N>().GetStackExpr(); + } + template <BNMediumLevelILOperation N> + MediumLevelILInstruction GetConditionExpr() const + { + return As<N>().GetConditionExpr(); + } + template <BNMediumLevelILOperation N> + Variable GetHighVariable() const + { + return As<N>().GetHighVariable(); + } + template <BNMediumLevelILOperation N> + Variable GetLowVariable() const + { + return As<N>().GetLowVariable(); + } + template <BNMediumLevelILOperation N> + SSAVariable GetHighSSAVariable() const + { + return As<N>().GetHighSSAVariable(); + } + template <BNMediumLevelILOperation N> + SSAVariable GetLowSSAVariable() const + { + return As<N>().GetLowSSAVariable(); + } + template <BNMediumLevelILOperation N> + uint64_t GetOffset() const + { + return As<N>().GetOffset(); + } + template <BNMediumLevelILOperation N> + int64_t GetConstant() const + { + return As<N>().GetConstant(); + } + template <BNMediumLevelILOperation N> + int64_t GetVector() const + { + return As<N>().GetVector(); + } + template <BNMediumLevelILOperation N> + uint32_t GetIntrinsic() const + { + return As<N>().GetIntrinsic(); + } + template <BNMediumLevelILOperation N> + size_t GetTarget() const + { + return As<N>().GetTarget(); + } + template <BNMediumLevelILOperation N> + size_t GetTrueTarget() const + { + return As<N>().GetTrueTarget(); + } + template <BNMediumLevelILOperation N> + size_t GetFalseTarget() const + { + return As<N>().GetFalseTarget(); + } + template <BNMediumLevelILOperation N> + size_t GetDestMemoryVersion() const + { + return As<N>().GetDestMemoryVersion(); + } + template <BNMediumLevelILOperation N> + size_t GetSourceMemoryVersion() const + { + return As<N>().GetSourceMemoryVersion(); + } + template <BNMediumLevelILOperation N> + MediumLevelILIndexMap GetTargets() const + { + return As<N>().GetTargets(); + } + template <BNMediumLevelILOperation N> + MediumLevelILIndexList GetSourceMemoryVersions() const + { + return As<N>().GetSourceMemoryVersions(); + } + template <BNMediumLevelILOperation N> + MediumLevelILVariableList GetOutputVariables() const + { + return As<N>().GetOutputVariables(); + } + template <BNMediumLevelILOperation N> + MediumLevelILSSAVariableList GetOutputSSAVariables() const + { + return As<N>().GetOutputSSAVariables(); + } + template <BNMediumLevelILOperation N> + MediumLevelILInstructionList GetParameterExprs() const + { + return As<N>().GetParameterExprs(); + } + template <BNMediumLevelILOperation N> + MediumLevelILInstructionList GetSourceExprs() const + { + return As<N>().GetSourceExprs(); + } + template <BNMediumLevelILOperation N> + MediumLevelILVariableList GetParameterVariables() const + { + return As<N>().GetParameterVariables(); + } + template <BNMediumLevelILOperation N> + MediumLevelILSSAVariableList GetParameterSSAVariables() const + { + return As<N>().GetParameterSSAVariables(); + } + template <BNMediumLevelILOperation N> + MediumLevelILSSAVariableList GetSourceSSAVariables() const + { + return As<N>().GetSourceSSAVariables(); + } - template <BNMediumLevelILOperation N> void SetDestSSAVersion(size_t version) { As<N>().SetDestSSAVersion(version); } - template <BNMediumLevelILOperation N> void SetSourceSSAVersion(size_t version) { As<N>().SetSourceSSAVersion(version); } - template <BNMediumLevelILOperation N> void SetHighSSAVersion(size_t version) { As<N>().SetHighSSAVersion(version); } - template <BNMediumLevelILOperation N> void SetLowSSAVersion(size_t version) { As<N>().SetLowSSAVersion(version); } - template <BNMediumLevelILOperation N> void SetDestMemoryVersion(size_t version) { As<N>().SetDestMemoryVersion(version); } - template <BNMediumLevelILOperation N> void SetSourceMemoryVersion(size_t version) { As<N>().SetSourceMemoryVersion(version); } - template <BNMediumLevelILOperation N> void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { As<N>().SetOutputSSAVariables(vars); } - template <BNMediumLevelILOperation N> void SetParameterSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { As<N>().SetParameterSSAVariables(vars); } - template <BNMediumLevelILOperation N> void SetParameterExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) { As<N>().SetParameterExprs(params); } - template <BNMediumLevelILOperation N> void SetParameterExprs(const _STD_VECTOR<ExprId>& params) { As<N>().SetParameterExprs(params); } - template <BNMediumLevelILOperation N> void SetSourceExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) { As<N>().SetSourceExprs(params); } - template <BNMediumLevelILOperation N> void SetSourceExprs(const _STD_VECTOR<ExprId>& params) { As<N>().SetSourceExprs(params); } + template <BNMediumLevelILOperation N> + void SetDestSSAVersion(size_t version) + { + As<N>().SetDestSSAVersion(version); + } + template <BNMediumLevelILOperation N> + void SetSourceSSAVersion(size_t version) + { + As<N>().SetSourceSSAVersion(version); + } + template <BNMediumLevelILOperation N> + void SetHighSSAVersion(size_t version) + { + As<N>().SetHighSSAVersion(version); + } + template <BNMediumLevelILOperation N> + void SetLowSSAVersion(size_t version) + { + As<N>().SetLowSSAVersion(version); + } + template <BNMediumLevelILOperation N> + void SetDestMemoryVersion(size_t version) + { + As<N>().SetDestMemoryVersion(version); + } + template <BNMediumLevelILOperation N> + void SetSourceMemoryVersion(size_t version) + { + As<N>().SetSourceMemoryVersion(version); + } + template <BNMediumLevelILOperation N> + void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + As<N>().SetOutputSSAVariables(vars); + } + template <BNMediumLevelILOperation N> + void SetParameterSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + As<N>().SetParameterSSAVariables(vars); + } + template <BNMediumLevelILOperation N> + void SetParameterExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) + { + As<N>().SetParameterExprs(params); + } + template <BNMediumLevelILOperation N> + void SetParameterExprs(const _STD_VECTOR<ExprId>& params) + { + As<N>().SetParameterExprs(params); + } + template <BNMediumLevelILOperation N> + void SetSourceExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) + { + As<N>().SetSourceExprs(params); + } + template <BNMediumLevelILOperation N> + void SetSourceExprs(const _STD_VECTOR<ExprId>& params) + { + As<N>().SetSourceExprs(params); + } bool GetOperandIndexForUsage(MediumLevelILOperandUsage usage, size_t& operandIndex) const; @@ -604,9 +800,9 @@ namespace BinaryNinja MediumLevelILOperandType m_type; size_t m_operandIndex; - public: - MediumLevelILOperand(const MediumLevelILInstruction& instr, MediumLevelILOperandUsage usage, - size_t operandIndex); + public: + MediumLevelILOperand( + const MediumLevelILInstruction& instr, MediumLevelILOperandUsage usage, size_t operandIndex); MediumLevelILOperandType GetType() const { return m_type; } MediumLevelILOperandUsage GetUsage() const { return m_usage; } @@ -633,7 +829,11 @@ namespace BinaryNinja bool operator==(const ListIterator& a) const { return pos == a.pos; } bool operator!=(const ListIterator& a) const { return pos != a.pos; } bool operator<(const ListIterator& a) const { return pos < a.pos; } - ListIterator& operator++() { ++pos; return *this; } + ListIterator& operator++() + { + ++pos; + return *this; + } const MediumLevelILOperand operator*(); }; @@ -641,12 +841,12 @@ namespace BinaryNinja const _STD_VECTOR<MediumLevelILOperandUsage>& m_usageList; const _STD_UNORDERED_MAP<MediumLevelILOperandUsage, size_t>& m_operandIndexMap; - public: + public: typedef ListIterator const_iterator; MediumLevelILOperandList(const MediumLevelILInstruction& instr, - const _STD_VECTOR<MediumLevelILOperandUsage>& usageList, - const _STD_UNORDERED_MAP<MediumLevelILOperandUsage, size_t>& operandIndexMap); + const _STD_VECTOR<MediumLevelILOperandUsage>& usageList, + const _STD_UNORDERED_MAP<MediumLevelILOperandUsage, size_t>& operandIndexMap); const_iterator begin() const; const_iterator end() const; @@ -656,23 +856,23 @@ namespace BinaryNinja operator _STD_VECTOR<MediumLevelILOperand>() const; }; - struct MediumLevelILConstantInstruction: public MediumLevelILInstructionBase + struct MediumLevelILConstantInstruction : public MediumLevelILInstructionBase { int64_t GetConstant() const { return GetRawOperandAsInteger(0); } }; - struct MediumLevelILOneOperandInstruction: public MediumLevelILInstructionBase + struct MediumLevelILOneOperandInstruction : public MediumLevelILInstructionBase { MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(0); } }; - struct MediumLevelILTwoOperandInstruction: public MediumLevelILInstructionBase + struct MediumLevelILTwoOperandInstruction : public MediumLevelILInstructionBase { MediumLevelILInstruction GetLeftExpr() const { return GetRawOperandAsExpr(0); } MediumLevelILInstruction GetRightExpr() const { return GetRawOperandAsExpr(1); } }; - struct MediumLevelILTwoOperandWithCarryInstruction: public MediumLevelILInstructionBase + struct MediumLevelILTwoOperandWithCarryInstruction : public MediumLevelILInstructionBase { MediumLevelILInstruction GetLeftExpr() const { return GetRawOperandAsExpr(0); } MediumLevelILInstruction GetRightExpr() const { return GetRawOperandAsExpr(1); } @@ -682,31 +882,36 @@ namespace BinaryNinja // Implementations of each instruction to fetch the correct operand value for the valid operands, these // are derived from MediumLevelILInstructionBase so that invalid operand accessor functions will generate // a compiler error. - template <> struct MediumLevelILInstructionAccessor<MLIL_SET_VAR>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SET_VAR> : public MediumLevelILInstructionBase { Variable GetDestVariable() const { return GetRawOperandAsVariable(0); } MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_FIELD>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_FIELD> : public MediumLevelILInstructionBase { Variable GetDestVariable() const { return GetRawOperandAsVariable(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(1); } MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(2); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_SPLIT>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_SPLIT> : public MediumLevelILInstructionBase { Variable GetHighVariable() const { return GetRawOperandAsVariable(0); } Variable GetLowVariable() const { return GetRawOperandAsVariable(1); } MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(2); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_SSA> : public MediumLevelILInstructionBase { SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); } MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(2); } void SetDestSSAVersion(size_t version) { UpdateRawOperand(1, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_SSA_FIELD>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_SSA_FIELD> : public MediumLevelILInstructionBase { SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); } SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsPartialSSAVariableSource(0); } @@ -715,7 +920,8 @@ namespace BinaryNinja void SetDestSSAVersion(size_t version) { UpdateRawOperand(1, version); } void SetSourceSSAVersion(size_t version) { UpdateRawOperand(2, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_SPLIT_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_SPLIT_SSA> : public MediumLevelILInstructionBase { SSAVariable GetHighSSAVariable() const { return GetRawOperandAsSSAVariable(0); } SSAVariable GetLowSSAVariable() const { return GetRawOperandAsSSAVariable(2); } @@ -723,7 +929,8 @@ namespace BinaryNinja void SetHighSSAVersion(size_t version) { UpdateRawOperand(1, version); } void SetLowSSAVersion(size_t version) { UpdateRawOperand(3, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_ALIASED>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_ALIASED> : public MediumLevelILInstructionBase { SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); } SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsPartialSSAVariableSource(0); } @@ -731,7 +938,8 @@ namespace BinaryNinja void SetDestMemoryVersion(size_t version) { UpdateRawOperand(1, version); } void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(2, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_ALIASED_FIELD>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SET_VAR_ALIASED_FIELD> : public MediumLevelILInstructionBase { SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); } SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsPartialSSAVariableSource(0); } @@ -741,19 +949,24 @@ namespace BinaryNinja void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(2, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_LOAD>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_LOAD_STRUCT>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_LOAD> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_LOAD_STRUCT> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_LOAD_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_LOAD_SSA> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(0); } size_t GetSourceMemoryVersion() const { return GetRawOperandAsIndex(1); } void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(1, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_LOAD_STRUCT_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_LOAD_STRUCT_SSA> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(1); } @@ -761,18 +974,21 @@ namespace BinaryNinja void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(2, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_STORE>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_STORE> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(0); } MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_STORE_STRUCT>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_STORE_STRUCT> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(1); } MediumLevelILInstruction GetSourceExpr() const { return GetRawOperandAsExpr(2); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_STORE_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_STORE_SSA> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(0); } size_t GetDestMemoryVersion() const { return GetRawOperandAsIndex(1); } @@ -781,7 +997,8 @@ namespace BinaryNinja void SetDestMemoryVersion(size_t version) { UpdateRawOperand(1, version); } void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(2, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_STORE_STRUCT_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_STORE_STRUCT_SSA> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(1); } @@ -792,44 +1009,52 @@ namespace BinaryNinja void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(3, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR> : public MediumLevelILInstructionBase { Variable GetSourceVariable() const { return GetRawOperandAsVariable(0); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR_FIELD>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR_FIELD> : public MediumLevelILInstructionBase { Variable GetSourceVariable() const { return GetRawOperandAsVariable(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR_SPLIT>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR_SPLIT> : public MediumLevelILInstructionBase { Variable GetHighVariable() const { return GetRawOperandAsVariable(0); } Variable GetLowVariable() const { return GetRawOperandAsVariable(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR_SSA> : public MediumLevelILInstructionBase { SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsSSAVariable(0); } void SetSourceSSAVersion(size_t version) { UpdateRawOperand(1, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR_SSA_FIELD>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR_SSA_FIELD> : public MediumLevelILInstructionBase { SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsSSAVariable(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(2); } void SetSourceSSAVersion(size_t version) { UpdateRawOperand(1, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR_ALIASED>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR_ALIASED> : public MediumLevelILInstructionBase { SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsSSAVariable(0); } void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(1, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR_ALIASED_FIELD>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR_ALIASED_FIELD> : public MediumLevelILInstructionBase { SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsSSAVariable(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(2); } void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(1, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR_SPLIT_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR_SPLIT_SSA> : public MediumLevelILInstructionBase { SSAVariable GetHighSSAVariable() const { return GetRawOperandAsSSAVariable(0); } SSAVariable GetLowSSAVariable() const { return GetRawOperandAsSSAVariable(2); } @@ -837,169 +1062,272 @@ namespace BinaryNinja void SetLowSSAVersion(size_t version) { UpdateRawOperand(3, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_ADDRESS_OF>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_ADDRESS_OF> : public MediumLevelILInstructionBase { Variable GetSourceVariable() const { return GetRawOperandAsVariable(0); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_ADDRESS_OF_FIELD>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_ADDRESS_OF_FIELD> : public MediumLevelILInstructionBase { Variable GetSourceVariable() const { return GetRawOperandAsVariable(0); } uint64_t GetOffset() const { return GetRawOperandAsInteger(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_JUMP>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_JUMP> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(0); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_JUMP_TO>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_JUMP_TO> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(0); } MediumLevelILIndexMap GetTargets() const { return GetRawOperandAsIndexMap(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_RET_HINT>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_RET_HINT> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(0); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_CALL>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_CALL> : public MediumLevelILInstructionBase { MediumLevelILVariableList GetOutputVariables() const { return GetRawOperandAsVariableList(0); } MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(2); } MediumLevelILInstructionList GetParameterExprs() const { return GetRawOperandAsExprList(3); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_CALL_UNTYPED>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_CALL_UNTYPED> : public MediumLevelILInstructionBase { - MediumLevelILVariableList GetOutputVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsVariableList(0); } + MediumLevelILVariableList GetOutputVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsVariableList(0); + } MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(1); } - MediumLevelILVariableList GetParameterVariables() const { return GetRawOperandAsExpr(2).GetRawOperandAsVariableList(0); } + MediumLevelILVariableList GetParameterVariables() const + { + return GetRawOperandAsExpr(2).GetRawOperandAsVariableList(0); + } MediumLevelILInstruction GetStackExpr() const { return GetRawOperandAsExpr(3); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SYSCALL>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SYSCALL> : public MediumLevelILInstructionBase { MediumLevelILVariableList GetOutputVariables() const { return GetRawOperandAsVariableList(0); } MediumLevelILInstructionList GetParameterExprs() const { return GetRawOperandAsExprList(2); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SYSCALL_UNTYPED>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SYSCALL_UNTYPED> : public MediumLevelILInstructionBase { - MediumLevelILVariableList GetOutputVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsVariableList(0); } - MediumLevelILVariableList GetParameterVariables() const { return GetRawOperandAsExpr(1).GetRawOperandAsVariableList(0); } + MediumLevelILVariableList GetOutputVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsVariableList(0); + } + MediumLevelILVariableList GetParameterVariables() const + { + return GetRawOperandAsExpr(1).GetRawOperandAsVariableList(0); + } MediumLevelILInstruction GetStackExpr() const { return GetRawOperandAsExpr(2); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_TAILCALL>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_TAILCALL> : public MediumLevelILInstructionBase { MediumLevelILVariableList GetOutputVariables() const { return GetRawOperandAsVariableList(0); } MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(2); } MediumLevelILInstructionList GetParameterExprs() const { return GetRawOperandAsExprList(3); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_TAILCALL_UNTYPED>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_TAILCALL_UNTYPED> : public MediumLevelILInstructionBase { - MediumLevelILVariableList GetOutputVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsVariableList(0); } + MediumLevelILVariableList GetOutputVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsVariableList(0); + } MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(1); } - MediumLevelILVariableList GetParameterVariables() const { return GetRawOperandAsExpr(2).GetRawOperandAsVariableList(0); } + MediumLevelILVariableList GetParameterVariables() const + { + return GetRawOperandAsExpr(2).GetRawOperandAsVariableList(0); + } MediumLevelILInstruction GetStackExpr() const { return GetRawOperandAsExpr(3); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_CALL_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_CALL_SSA> : public MediumLevelILInstructionBase { size_t GetDestMemoryVersion() const { return GetRawOperandAsExpr(0).GetRawOperandAsIndex(0); } - MediumLevelILSSAVariableList GetOutputSSAVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); } + MediumLevelILSSAVariableList GetOutputSSAVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); + } MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(1); } MediumLevelILInstructionList GetParameterExprs() const { return GetRawOperandAsExprList(2); } size_t GetSourceMemoryVersion() const { return GetRawOperandAsIndex(4); } void SetDestMemoryVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(0, version); } void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(4, version); } - void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); } - void SetParameterExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) { UpdateRawOperandAsExprList(2, params); } + void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); + } + void SetParameterExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) + { + UpdateRawOperandAsExprList(2, params); + } void SetParameterExprs(const _STD_VECTOR<ExprId>& params) { UpdateRawOperandAsExprList(2, params); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_CALL_UNTYPED_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_CALL_UNTYPED_SSA> : public MediumLevelILInstructionBase { size_t GetDestMemoryVersion() const { return GetRawOperandAsExpr(0).GetRawOperandAsIndex(0); } - MediumLevelILSSAVariableList GetOutputSSAVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); } + MediumLevelILSSAVariableList GetOutputSSAVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); + } MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(1); } - MediumLevelILSSAVariableList GetParameterSSAVariables() const { return GetRawOperandAsExpr(2).GetRawOperandAsSSAVariableList(1); } + MediumLevelILSSAVariableList GetParameterSSAVariables() const + { + return GetRawOperandAsExpr(2).GetRawOperandAsSSAVariableList(1); + } size_t GetSourceMemoryVersion() const { return GetRawOperandAsExpr(2).GetRawOperandAsIndex(0); } MediumLevelILInstruction GetStackExpr() const { return GetRawOperandAsExpr(3); } void SetDestMemoryVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(0, version); } void SetSourceMemoryVersion(size_t version) { GetRawOperandAsExpr(2).UpdateRawOperand(0, version); } - void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); } - void SetParameterSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(2).UpdateRawOperandAsSSAVariableList(1, vars); } + void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); + } + void SetParameterSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(2).UpdateRawOperandAsSSAVariableList(1, vars); + } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SYSCALL_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SYSCALL_SSA> : public MediumLevelILInstructionBase { size_t GetDestMemoryVersion() const { return GetRawOperandAsExpr(0).GetRawOperandAsIndex(0); } - MediumLevelILSSAVariableList GetOutputSSAVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); } + MediumLevelILSSAVariableList GetOutputSSAVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); + } MediumLevelILInstructionList GetParameterExprs() const { return GetRawOperandAsExprList(1); } size_t GetSourceMemoryVersion() const { return GetRawOperandAsIndex(3); } void SetDestMemoryVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(0, version); } void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(3, version); } - void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); } - void SetParameterExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) { UpdateRawOperandAsExprList(1, params); } + void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); + } + void SetParameterExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) + { + UpdateRawOperandAsExprList(1, params); + } void SetParameterExprs(const _STD_VECTOR<ExprId>& params) { UpdateRawOperandAsExprList(1, params); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_SYSCALL_UNTYPED_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_SYSCALL_UNTYPED_SSA> : public MediumLevelILInstructionBase { size_t GetDestMemoryVersion() const { return GetRawOperandAsExpr(0).GetRawOperandAsIndex(0); } - MediumLevelILSSAVariableList GetOutputSSAVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); } - MediumLevelILSSAVariableList GetParameterSSAVariables() const { return GetRawOperandAsExpr(1).GetRawOperandAsSSAVariableList(1); } + MediumLevelILSSAVariableList GetOutputSSAVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); + } + MediumLevelILSSAVariableList GetParameterSSAVariables() const + { + return GetRawOperandAsExpr(1).GetRawOperandAsSSAVariableList(1); + } size_t GetSourceMemoryVersion() const { return GetRawOperandAsExpr(1).GetRawOperandAsIndex(0); } MediumLevelILInstruction GetStackExpr() const { return GetRawOperandAsExpr(2); } void SetDestMemoryVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(0, version); } void SetSourceMemoryVersion(size_t version) { GetRawOperandAsExpr(1).UpdateRawOperand(0, version); } - void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); } - void SetParameterSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(1).UpdateRawOperandAsSSAVariableList(1, vars); } + void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); + } + void SetParameterSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(1).UpdateRawOperandAsSSAVariableList(1, vars); + } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_TAILCALL_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_TAILCALL_SSA> : public MediumLevelILInstructionBase { size_t GetDestMemoryVersion() const { return GetRawOperandAsExpr(0).GetRawOperandAsIndex(0); } - MediumLevelILSSAVariableList GetOutputSSAVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); } + MediumLevelILSSAVariableList GetOutputSSAVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); + } MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(1); } MediumLevelILInstructionList GetParameterExprs() const { return GetRawOperandAsExprList(2); } size_t GetSourceMemoryVersion() const { return GetRawOperandAsIndex(4); } void SetDestMemoryVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(0, version); } void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(4, version); } - void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); } - void SetParameterExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) { UpdateRawOperandAsExprList(2, params); } + void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); + } + void SetParameterExprs(const _STD_VECTOR<MediumLevelILInstruction>& params) + { + UpdateRawOperandAsExprList(2, params); + } void SetParameterExprs(const _STD_VECTOR<ExprId>& params) { UpdateRawOperandAsExprList(2, params); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_TAILCALL_UNTYPED_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_TAILCALL_UNTYPED_SSA> : public MediumLevelILInstructionBase { size_t GetDestMemoryVersion() const { return GetRawOperandAsExpr(0).GetRawOperandAsIndex(0); } - MediumLevelILSSAVariableList GetOutputSSAVariables() const { return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); } + MediumLevelILSSAVariableList GetOutputSSAVariables() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsSSAVariableList(1); + } MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(1); } - MediumLevelILSSAVariableList GetParameterSSAVariables() const { return GetRawOperandAsExpr(2).GetRawOperandAsSSAVariableList(1); } + MediumLevelILSSAVariableList GetParameterSSAVariables() const + { + return GetRawOperandAsExpr(2).GetRawOperandAsSSAVariableList(1); + } size_t GetSourceMemoryVersion() const { return GetRawOperandAsExpr(2).GetRawOperandAsIndex(0); } MediumLevelILInstruction GetStackExpr() const { return GetRawOperandAsExpr(3); } void SetDestMemoryVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(0, version); } void SetSourceMemoryVersion(size_t version) { GetRawOperandAsExpr(2).UpdateRawOperand(0, version); } - void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); } - void SetParameterSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { GetRawOperandAsExpr(2).UpdateRawOperandAsSSAVariableList(1, vars); } + void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(0).UpdateRawOperandAsSSAVariableList(1, vars); + } + void SetParameterSSAVariables(const _STD_VECTOR<SSAVariable>& vars) + { + GetRawOperandAsExpr(2).UpdateRawOperandAsSSAVariableList(1, vars); + } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_RET>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_RET> : public MediumLevelILInstructionBase { MediumLevelILInstructionList GetSourceExprs() const { return GetRawOperandAsExprList(0); } void SetSourceExprs(const _STD_VECTOR<ExprId>& exprs) { UpdateRawOperandAsExprList(0, exprs); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_IF>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_IF> : public MediumLevelILInstructionBase { MediumLevelILInstruction GetConditionExpr() const { return GetRawOperandAsExpr(0); } size_t GetTrueTarget() const { return GetRawOperandAsIndex(1); } size_t GetFalseTarget() const { return GetRawOperandAsIndex(2); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_GOTO>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_GOTO> : public MediumLevelILInstructionBase { size_t GetTarget() const { return GetRawOperandAsIndex(0); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_INTRINSIC>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_INTRINSIC> : public MediumLevelILInstructionBase { MediumLevelILVariableList GetOutputVariables() const { return GetRawOperandAsVariableList(0); } uint32_t GetIntrinsic() const { return (uint32_t)GetRawOperandAsInteger(2); } MediumLevelILInstructionList GetParameterExprs() const { return GetRawOperandAsExprList(3); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_INTRINSIC_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_INTRINSIC_SSA> : public MediumLevelILInstructionBase { MediumLevelILSSAVariableList GetOutputSSAVariables() const { return GetRawOperandAsSSAVariableList(0); } uint32_t GetIntrinsic() const { return (uint32_t)GetRawOperandAsInteger(2); } @@ -1007,11 +1335,13 @@ namespace BinaryNinja void SetOutputSSAVariables(const _STD_VECTOR<SSAVariable>& vars) { UpdateRawOperandAsSSAVariableList(0, vars); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_FREE_VAR_SLOT>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_FREE_VAR_SLOT> : public MediumLevelILInstructionBase { Variable GetDestVariable() const { return GetRawOperandAsVariable(0); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_FREE_VAR_SLOT_SSA>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_FREE_VAR_SLOT_SSA> : public MediumLevelILInstructionBase { SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); } SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsPartialSSAVariableSource(0); } @@ -1019,110 +1349,264 @@ namespace BinaryNinja void SetSourceSSAVersion(size_t version) { UpdateRawOperand(2, version); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_TRAP>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_TRAP> : public MediumLevelILInstructionBase { int64_t GetVector() const { return GetRawOperandAsInteger(0); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_VAR_PHI>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_VAR_PHI> : public MediumLevelILInstructionBase { SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); } MediumLevelILSSAVariableList GetSourceSSAVariables() const { return GetRawOperandAsSSAVariableList(2); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_MEM_PHI>: public MediumLevelILInstructionBase + template <> + struct MediumLevelILInstructionAccessor<MLIL_MEM_PHI> : public MediumLevelILInstructionBase { size_t GetDestMemoryVersion() const { return GetRawOperandAsIndex(0); } MediumLevelILIndexList GetSourceMemoryVersions() const { return GetRawOperandAsIndexList(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_EXTERN_PTR>: public MediumLevelILConstantInstruction + template <> + struct MediumLevelILInstructionAccessor<MLIL_EXTERN_PTR> : public MediumLevelILConstantInstruction { int64_t GetConstant() const { return GetRawOperandAsInteger(0); } int64_t GetOffset() const { return GetRawOperandAsInteger(1); } }; - template <> struct MediumLevelILInstructionAccessor<MLIL_NOP>: public MediumLevelILInstructionBase {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_NORET>: public MediumLevelILInstructionBase {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_BP>: public MediumLevelILInstructionBase {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_UNDEF>: public MediumLevelILInstructionBase {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_UNIMPL>: public MediumLevelILInstructionBase {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_NOP> : public MediumLevelILInstructionBase + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_NORET> : public MediumLevelILInstructionBase + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_BP> : public MediumLevelILInstructionBase + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_UNDEF> : public MediumLevelILInstructionBase + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_UNIMPL> : public MediumLevelILInstructionBase + {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CONST>: public MediumLevelILConstantInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CONST_PTR>: public MediumLevelILConstantInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FLOAT_CONST>: public MediumLevelILConstantInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_IMPORT>: public MediumLevelILConstantInstruction {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CONST> : public MediumLevelILConstantInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CONST_PTR> : public MediumLevelILConstantInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FLOAT_CONST> : public MediumLevelILConstantInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_IMPORT> : public MediumLevelILConstantInstruction + {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_ADD>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_SUB>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_AND>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_OR>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_XOR>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_LSL>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_LSR>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_ASR>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_ROL>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_ROR>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_MUL>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_MULU_DP>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_MULS_DP>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_DIVU>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_DIVS>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_MODU>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_MODS>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_DIVU_DP>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_DIVS_DP>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_MODU_DP>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_MODS_DP>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_E>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_NE>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_SLT>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_ULT>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_SLE>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_ULE>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_SGE>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_UGE>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_SGT>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CMP_UGT>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_TEST_BIT>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_ADD_OVERFLOW>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FADD>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FSUB>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FMUL>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FDIV>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FCMP_E>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FCMP_NE>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FCMP_LT>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FCMP_LE>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FCMP_GE>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FCMP_GT>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FCMP_O>: public MediumLevelILTwoOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FCMP_UO>: public MediumLevelILTwoOperandInstruction {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_ADD> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_SUB> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_AND> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_OR> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_XOR> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_LSL> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_LSR> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_ASR> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_ROL> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_ROR> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_MUL> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_MULU_DP> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_MULS_DP> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_DIVU> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_DIVS> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_MODU> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_MODS> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_DIVU_DP> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_DIVS_DP> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_MODU_DP> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_MODS_DP> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_E> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_NE> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_SLT> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_ULT> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_SLE> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_ULE> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_SGE> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_UGE> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_SGT> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CMP_UGT> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_TEST_BIT> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_ADD_OVERFLOW> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FADD> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FSUB> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FMUL> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FDIV> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FCMP_E> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FCMP_NE> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FCMP_LT> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FCMP_LE> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FCMP_GE> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FCMP_GT> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FCMP_O> : public MediumLevelILTwoOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FCMP_UO> : public MediumLevelILTwoOperandInstruction + {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_ADC>: public MediumLevelILTwoOperandWithCarryInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_SBB>: public MediumLevelILTwoOperandWithCarryInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_RLC>: public MediumLevelILTwoOperandWithCarryInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_RRC>: public MediumLevelILTwoOperandWithCarryInstruction {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_ADC> : public MediumLevelILTwoOperandWithCarryInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_SBB> : public MediumLevelILTwoOperandWithCarryInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_RLC> : public MediumLevelILTwoOperandWithCarryInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_RRC> : public MediumLevelILTwoOperandWithCarryInstruction + {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_NEG>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_NOT>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_SX>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_ZX>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_LOW_PART>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_BOOL_TO_INT>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_UNIMPL_MEM>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FSQRT>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FNEG>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FABS>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FLOAT_TO_INT>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_INT_TO_FLOAT>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FLOAT_CONV>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_ROUND_TO_INT>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FLOOR>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_CEIL>: public MediumLevelILOneOperandInstruction {}; - template <> struct MediumLevelILInstructionAccessor<MLIL_FTRUNC>: public MediumLevelILOneOperandInstruction {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_NEG> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_NOT> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_SX> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_ZX> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_LOW_PART> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_BOOL_TO_INT> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_UNIMPL_MEM> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FSQRT> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FNEG> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FABS> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FLOAT_TO_INT> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_INT_TO_FLOAT> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FLOAT_CONV> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_ROUND_TO_INT> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FLOOR> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_CEIL> : public MediumLevelILOneOperandInstruction + {}; + template <> + struct MediumLevelILInstructionAccessor<MLIL_FTRUNC> : public MediumLevelILOneOperandInstruction + {}; #undef _STD_VECTOR #undef _STD_SET #undef _STD_UNORDERED_MAP #undef _STD_MAP -} +} // namespace BinaryNinjaCore |
