From bcdc0d9b89605936a1cb6cf3ffaaece60d3c5777 Mon Sep 17 00:00:00 2001 From: Ryan Snyder Date: Fri, 24 Jan 2025 17:57:26 -0500 Subject: uidf refactor --- mediumlevelilinstruction.h | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'mediumlevelilinstruction.h') diff --git a/mediumlevelilinstruction.h b/mediumlevelilinstruction.h index 018f9ffc..589f7c8b 100644 --- a/mediumlevelilinstruction.h +++ b/mediumlevelilinstruction.h @@ -88,7 +88,8 @@ namespace BinaryNinja IndexMapMediumLevelOperand, VariableListMediumLevelOperand, SSAVariableListMediumLevelOperand, - ExprListMediumLevelOperand + ExprListMediumLevelOperand, + ConstraintMediumLevelOperand }; /*! @@ -134,7 +135,8 @@ namespace BinaryNinja UntypedParameterExprsMediumLevelOperandUsage, UntypedParameterSSAExprsMediumLevelOperandUsage, ParameterSSAMemoryVersionMediumLevelOperandUsage, - SourceSSAVariablesMediumLevelOperandUsages + SourceSSAVariablesMediumLevelOperandUsages, + ConstraintMediumLevelOperandUsage }; } // namespace BinaryNinjaCore @@ -457,6 +459,7 @@ namespace BinaryNinja MediumLevelILVariableList GetRawOperandAsVariableList(size_t operand) const; MediumLevelILSSAVariableList GetRawOperandAsSSAVariableList(size_t operand) const; MediumLevelILInstructionList GetRawOperandAsExprList(size_t operand) const; + PossibleValueSet GetRawOperandAsPossibleValueSet(size_t operand) const; void UpdateRawOperand(size_t operandIndex, ExprId value); void UpdateRawOperandAsSSAVariableList(size_t operandIndex, const _STD_VECTOR& vars); @@ -737,6 +740,11 @@ namespace BinaryNinja { return As().GetSourceSSAVariables(); } + template + PossibleValueSet GetConstraint() const + { + return As().GetConstraint(); + } template void SetDestSSAVersion(size_t version) @@ -1015,6 +1023,35 @@ namespace BinaryNinja void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(2, version); } }; + template <> + struct MediumLevelILInstructionAccessor : public MediumLevelILInstructionBase + { + Variable GetDestVariable() const { return GetRawOperandAsVariable(0); } + Variable GetSourceVariable() const { return GetRawOperandAsVariable(1); } + }; + template <> + struct MediumLevelILInstructionAccessor : public MediumLevelILInstructionBase + { + SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); } + void SetDestSSAVersion(size_t version) { UpdateRawOperand(1, version); } + SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsSSAVariable(2); } + void SetSourceSSAVersion(size_t version) { UpdateRawOperand(3, version); } + }; + template <> + struct MediumLevelILInstructionAccessor : public MediumLevelILInstructionBase + { + Variable GetSourceVariable() const { return GetRawOperandAsVariable(0); } + PossibleValueSet GetConstraint() const { return GetRawOperandAsPossibleValueSet(1); } + }; + template <> + struct MediumLevelILInstructionAccessor : public MediumLevelILInstructionBase + { + SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsSSAVariable(0); } + void SetSourceSSAVersion(size_t version) { UpdateRawOperand(1, version); } + PossibleValueSet GetConstraint() const { return GetRawOperandAsPossibleValueSet(2); } + }; + + template <> struct MediumLevelILInstructionAccessor : public MediumLevelILOneOperandInstruction {}; -- cgit v1.3.1