From 2e3b9c925390cc8b1d72a41d0564bb2862d3dba2 Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Sat, 2 Mar 2024 14:38:47 -0500 Subject: Add support for memory intrinsics. --- lowlevelilinstruction.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'lowlevelilinstruction.h') diff --git a/lowlevelilinstruction.h b/lowlevelilinstruction.h index e51a11cf..898e72b8 100644 --- a/lowlevelilinstruction.h +++ b/lowlevelilinstruction.h @@ -240,6 +240,7 @@ namespace BinaryNinja SourceSSAFlagsLowLevelOperandUsage, OutputRegisterOrFlagListLowLevelOperandUsage, OutputSSARegisterOrFlagListLowLevelOperandUsage, + OutputMemoryIntrinsicLowLevelOperandUsage, SourceMemoryVersionsLowLevelOperandUsage, TargetsLowLevelOperandUsage, RegisterStackAdjustmentsLowLevelOperandUsage, @@ -1701,6 +1702,27 @@ namespace BinaryNinja UpdateRawOperandAsSSARegisterOrFlagList(0, outputs); } }; + template <> + struct LowLevelILInstructionAccessor : public LowLevelILInstructionBase + { + LowLevelILSSARegisterOrFlagList GetOutputSSARegisterOrFlagList() const + { + return GetRawOperandAsExpr(0).GetRawOperandAsSSARegisterOrFlagList(1); + } + size_t GetDestMemoryVersion() const { return GetRawOperandAsExpr(0).GetRawOperandAsIndex(0); } + size_t GetSourceMemoryVersion() const { return GetRawOperandAsIndex(3); } + uint32_t GetIntrinsic() const { return GetRawOperandAsRegister(1); } + LowLevelILInstructionList GetParameterExprs() const + { + return GetRawOperandAsExpr(2).GetRawOperandAsExprList(0); + } + void SetDestMemoryVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(0, version); } + void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(3, version); } + void SetOutputSSARegisterOrFlagList(const _STD_VECTOR& outputs) + { + GetRawOperandAsExpr(0).UpdateRawOperandAsSSARegisterOrFlagList(1, outputs); + } + }; template <> struct LowLevelILInstructionAccessor : public LowLevelILInstructionBase -- cgit v1.3.1