From bcdc0d9b89605936a1cb6cf3ffaaece60d3c5777 Mon Sep 17 00:00:00 2001 From: Ryan Snyder Date: Fri, 24 Jan 2025 17:57:26 -0500 Subject: uidf refactor --- lowlevelilinstruction.h | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'lowlevelilinstruction.h') diff --git a/lowlevelilinstruction.h b/lowlevelilinstruction.h index b9a31798..5ea6faef 100644 --- a/lowlevelilinstruction.h +++ b/lowlevelilinstruction.h @@ -184,7 +184,8 @@ namespace BinaryNinja SSARegisterStackListLowLevelOperand, SSAFlagListLowLevelOperand, SSARegisterOrFlagListLowLevelOperand, - RegisterStackAdjustmentsLowLevelOperand + RegisterStackAdjustmentsLowLevelOperand, + ConstraintLowLevelOperand, }; /*! @@ -244,7 +245,8 @@ namespace BinaryNinja SourceMemoryVersionsLowLevelOperandUsage, TargetsLowLevelOperandUsage, RegisterStackAdjustmentsLowLevelOperandUsage, - OffsetLowLevelOperandUsage + OffsetLowLevelOperandUsage, + ConstraintLowLevelOperandUsage, }; } // namespace BinaryNinjaCore @@ -718,6 +720,7 @@ namespace BinaryNinja LowLevelILSSAFlagList GetRawOperandAsSSAFlagList(size_t operand) const; LowLevelILSSARegisterOrFlagList GetRawOperandAsSSARegisterOrFlagList(size_t operand) const; _STD_MAP GetRawOperandAsRegisterStackAdjustments(size_t operand) const; + PossibleValueSet GetRawOperandAsPossibleValueSet(size_t operand) const; void UpdateRawOperand(size_t operandIndex, ExprId value); void UpdateRawOperandAsSSARegisterList(size_t operandIndex, const _STD_VECTOR& regs); @@ -1116,6 +1119,11 @@ namespace BinaryNinja { As().SetOutputSSARegisterOrFlagList(outputs); } + template + PossibleValueSet GetConstraint() const + { + return As().GetConstraint(); + } bool GetOperandIndexForUsage(LowLevelILOperandUsage usage, size_t& operandIndex) const; @@ -1366,6 +1374,32 @@ namespace BinaryNinja void SetSourceSSAVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(2, version); } }; template <> + struct LowLevelILInstructionAccessor : public LowLevelILInstructionBase + { + uint32_t GetDestRegister() const { return GetRawOperandAsRegister(0); } + }; + template <> + struct LowLevelILInstructionAccessor : public LowLevelILInstructionBase + { + SSARegister GetDestSSARegister() const { return GetRawOperandAsSSARegister(0); } + void SetDestSSAVersion(size_t version) { UpdateRawOperand(1, version); } + SSARegister GetSourceSSARegister() const { return GetRawOperandAsSSARegister(2); } + void SetSourceSSAVersion(size_t version) { UpdateRawOperand(3, version); } + }; + template <> + struct LowLevelILInstructionAccessor : public LowLevelILInstructionBase + { + uint32_t GetSourceRegister() const { return GetRawOperandAsRegister(0); } + PossibleValueSet GetConstraint() const { return GetRawOperandAsPossibleValueSet(1); } + }; + template <> + struct LowLevelILInstructionAccessor : public LowLevelILInstructionBase + { + SSARegister GetSourceSSARegister() const { return GetRawOperandAsSSARegister(0); } + void SetSourceSSAVersion(size_t version) { UpdateRawOperand(1, version); } + PossibleValueSet GetConstraint() const { return GetRawOperandAsPossibleValueSet(2); } + }; + template <> struct LowLevelILInstructionAccessor : public LowLevelILInstructionBase { uint32_t GetDestFlag() const { return GetRawOperandAsRegister(0); } -- cgit v1.3.1