summaryrefslogtreecommitdiff
path: root/mediumlevelil.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2017-03-07 02:38:09 -0500
committerRusty Wagner <rusty@vector35.com>2017-03-07 02:38:09 -0500
commit3a95d0ae05e21775042176b8f688bafeb3f6d80f (patch)
tree371d67bd4d5e86b0158e5c01e65038eda213f796 /mediumlevelil.cpp
parent7aab4e4a3f8f2daadd1fbd00259da5b01090d84c (diff)
Add outputs and parameters for call and return, handle aliasing
Diffstat (limited to 'mediumlevelil.cpp')
-rw-r--r--mediumlevelil.cpp39
1 files changed, 34 insertions, 5 deletions
diff --git a/mediumlevelil.cpp b/mediumlevelil.cpp
index 8c97db61..f1f0bdd2 100644
--- a/mediumlevelil.cpp
+++ b/mediumlevelil.cpp
@@ -61,9 +61,9 @@ size_t MediumLevelILFunction::GetInstructionStart(Architecture* arch, uint64_t a
ExprId MediumLevelILFunction::AddExpr(BNMediumLevelILOperation operation, size_t size,
- ExprId a, ExprId b, ExprId c, ExprId d, ExprId e)
+ ExprId a, ExprId b, ExprId c, ExprId d, ExprId e, ExprId f)
{
- return BNMediumLevelILAddExpr(m_object, operation, size, a, b, c, d, e);
+ return BNMediumLevelILAddExpr(m_object, operation, size, a, b, c, d, e, f);
}
@@ -100,11 +100,11 @@ ExprId MediumLevelILFunction::SetVarSSA(size_t size, const BNILVariable& var, si
}
-ExprId MediumLevelILFunction::SetVarFieldSSA(size_t size, const BNILVariable& var, int64_t offset,
- size_t varIndex, ExprId src)
+ExprId MediumLevelILFunction::SetVarFieldSSA(size_t size, const BNILVariable& var, size_t varIndex,
+ int64_t offset, ExprId src)
{
return AddExpr(MLIL_SET_VAR_SSA_FIELD, size, ((uint64_t)var.type << 32) | (uint64_t)var.index, var.identifier,
- offset, varIndex, src);
+ varIndex, offset, src);
}
@@ -119,6 +119,22 @@ ExprId MediumLevelILFunction::SetVarSplitSSA(size_t size, const BNILVariable& hi
}
+ExprId MediumLevelILFunction::SetVarAliased(size_t size, const BNILVariable& var, size_t destIndex,
+ size_t srcIndex, ExprId src)
+{
+ return AddExpr(MLIL_SET_VAR_ALIASED, size, ((uint64_t)var.type << 32) | (uint64_t)var.index, var.identifier,
+ destIndex, srcIndex, src);
+}
+
+
+ExprId MediumLevelILFunction::SetVarFieldAliased(size_t size, const BNILVariable& var, size_t destIndex,
+ size_t srcIndex, int64_t offset, ExprId src)
+{
+ return AddExpr(MLIL_SET_VAR_ALIASED_FIELD, size, ((uint64_t)var.type << 32) | (uint64_t)var.index, var.identifier,
+ destIndex, srcIndex, offset, src);
+}
+
+
ExprId MediumLevelILFunction::Var(size_t size, const BNILVariable& var)
{
return AddExpr(MLIL_VAR, size, ((uint64_t)var.type << 32) | (uint64_t)var.index, var.identifier);
@@ -145,6 +161,19 @@ ExprId MediumLevelILFunction::VarFieldSSA(size_t size, const BNILVariable& var,
}
+ExprId MediumLevelILFunction::VarAliased(size_t size, const BNILVariable& var, size_t memIndex)
+{
+ return AddExpr(MLIL_VAR_ALIASED, size, ((uint64_t)var.type << 32) | (uint64_t)var.index, var.identifier, memIndex);
+}
+
+
+ExprId MediumLevelILFunction::VarFieldAliased(size_t size, const BNILVariable& var, int64_t offset, size_t memIndex)
+{
+ return AddExpr(MLIL_VAR_ALIASED_FIELD, size, ((uint64_t)var.type << 32) | (uint64_t)var.index, var.identifier,
+ offset, memIndex);
+}
+
+
ExprId MediumLevelILFunction::AddressOf(size_t size, const BNILVariable& var)
{
return AddExpr(MLIL_ADDRESS_OF, size, ((uint64_t)var.type << 32) | (uint64_t)var.index, var.identifier);