summaryrefslogtreecommitdiff
path: root/mediumlevelilinstruction.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2025-12-23 13:12:02 -0700
committerRusty Wagner <rusty.wagner@gmail.com>2026-05-22 16:30:56 -0400
commit8d621c51b2797fda7b1dc22243dde611cfc04f68 (patch)
treeba5e6a90e644d21d13e75dabcbd0cc747444443a /mediumlevelilinstruction.h
parent08e34ac325743085911f96b62c81d9a1f2127806 (diff)
Refactor calling conventions to support correct representation of structures
Diffstat (limited to 'mediumlevelilinstruction.h')
-rw-r--r--mediumlevelilinstruction.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/mediumlevelilinstruction.h b/mediumlevelilinstruction.h
index c7663269..3abe363e 100644
--- a/mediumlevelilinstruction.h
+++ b/mediumlevelilinstruction.h
@@ -1237,6 +1237,32 @@ namespace BinaryNinja
void SetDestSSAVersion(size_t version) { UpdateRawOperand(1, version); }
};
template <>
+ struct MediumLevelILInstructionAccessor<MLIL_VAR_OUTPUT_SSA_FIELD> : public MediumLevelILInstructionBase
+ {
+ SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); }
+ SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsPartialSSAVariableSource(0); }
+ uint64_t GetOffset() const { return GetRawOperandAsInteger(3); }
+ void SetDestSSAVersion(size_t version) { UpdateRawOperand(1, version); }
+ void SetSourceSSAVersion(size_t version) { UpdateRawOperand(2, version); }
+ };
+ template <>
+ struct MediumLevelILInstructionAccessor<MLIL_VAR_OUTPUT_ALIASED> : public MediumLevelILInstructionBase
+ {
+ SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); }
+ SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsPartialSSAVariableSource(0); }
+ void SetDestMemoryVersion(size_t version) { UpdateRawOperand(1, version); }
+ void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(2, version); }
+ };
+ template <>
+ struct MediumLevelILInstructionAccessor<MLIL_VAR_OUTPUT_ALIASED_FIELD> : public MediumLevelILInstructionBase
+ {
+ SSAVariable GetDestSSAVariable() const { return GetRawOperandAsSSAVariable(0); }
+ SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsPartialSSAVariableSource(0); }
+ uint64_t GetOffset() const { return GetRawOperandAsInteger(3); }
+ void SetDestMemoryVersion(size_t version) { UpdateRawOperand(1, version); }
+ void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(2, version); }
+ };
+ template <>
struct MediumLevelILInstructionAccessor<MLIL_VAR_SSA_FIELD> : public MediumLevelILInstructionBase
{
SSAVariable GetSourceSSAVariable() const { return GetRawOperandAsSSAVariable(0); }
@@ -1355,6 +1381,17 @@ namespace BinaryNinja
{
Variable GetDestVariable() const { return GetRawOperandAsVariable(0); }
};
+ template <>
+ struct MediumLevelILInstructionAccessor<MLIL_VAR_OUTPUT_FIELD> : public MediumLevelILInstructionBase
+ {
+ Variable GetDestVariable() const { return GetRawOperandAsVariable(0); }
+ uint64_t GetOffset() const { return GetRawOperandAsInteger(1); }
+ };
+ template <>
+ struct MediumLevelILInstructionAccessor<MLIL_STORE_OUTPUT> : public MediumLevelILInstructionBase
+ {
+ MediumLevelILInstruction GetDestExpr() const { return GetRawOperandAsExpr(0); }
+ };
template <>
struct MediumLevelILInstructionAccessor<MLIL_CALL_SSA> : public MediumLevelILCallSSAInstruction
@@ -1555,6 +1592,13 @@ namespace BinaryNinja
};
template <>
+ struct MediumLevelILInstructionAccessor<MLIL_BLOCK_TO_EXPAND> : public MediumLevelILInstructionBase
+ {
+ MediumLevelILInstructionList GetSourceExprs() const { return GetRawOperandAsExprList(0); }
+ void SetSourceExprs(const _STD_VECTOR<ExprId>& exprs) { UpdateRawOperandAsExprList(0, exprs); }
+ };
+
+ template <>
struct MediumLevelILInstructionAccessor<MLIL_NOP> : public MediumLevelILInstructionBase
{};
template <>
@@ -1786,6 +1830,12 @@ namespace BinaryNinja
template <>
struct MediumLevelILInstructionAccessor<MLIL_FTRUNC> : public MediumLevelILOneOperandInstruction
{};
+ template <>
+ struct MediumLevelILInstructionAccessor<MLIL_PASS_BY_REF> : public MediumLevelILOneOperandInstruction
+ {};
+ template <>
+ struct MediumLevelILInstructionAccessor<MLIL_RETURN_BY_REF> : public MediumLevelILOneOperandInstruction
+ {};
#undef _STD_VECTOR
#undef _STD_SET