summaryrefslogtreecommitdiff
path: root/mediumlevelilinstruction.h
diff options
context:
space:
mode:
Diffstat (limited to 'mediumlevelilinstruction.h')
-rw-r--r--mediumlevelilinstruction.h1032
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