summaryrefslogtreecommitdiff
path: root/mediumlevelil.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2017-03-02 00:37:46 -0500
committerRusty Wagner <rusty@vector35.com>2017-03-02 00:37:46 -0500
commit7aab4e4a3f8f2daadd1fbd00259da5b01090d84c (patch)
tree7b9db291c184b44b6b2a4a9f2af66e5d9bc6b464 /mediumlevelil.cpp
parent94b38cee51eff16f1e79945806088c7ae60016d7 (diff)
Adding MLIL instructions, moving stack contents data flow to a later stage
Diffstat (limited to 'mediumlevelil.cpp')
-rw-r--r--mediumlevelil.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/mediumlevelil.cpp b/mediumlevelil.cpp
index f6ad5bfd..8c97db61 100644
--- a/mediumlevelil.cpp
+++ b/mediumlevelil.cpp
@@ -86,6 +86,13 @@ ExprId MediumLevelILFunction::SetVarField(size_t size, const BNILVariable& var,
}
+ExprId MediumLevelILFunction::SetVarSplit(size_t size, const BNILVariable& high, const BNILVariable& low, ExprId src)
+{
+ return AddExpr(MLIL_SET_VAR_SPLIT, size, ((uint64_t)high.type << 32) | (uint64_t)high.index, high.identifier,
+ ((uint64_t)low.type << 32) | (uint64_t)low.index, low.identifier, src);
+}
+
+
ExprId MediumLevelILFunction::SetVarSSA(size_t size, const BNILVariable& var, size_t varIndex, ExprId src)
{
return AddExpr(MLIL_SET_VAR_SSA, size, ((uint64_t)var.type << 32) | (uint64_t)var.index, var.identifier,
@@ -101,6 +108,17 @@ ExprId MediumLevelILFunction::SetVarFieldSSA(size_t size, const BNILVariable& va
}
+ExprId MediumLevelILFunction::SetVarSplitSSA(size_t size, const BNILVariable& high, size_t highIndex,
+ const BNILVariable& low, size_t lowIndex, ExprId src)
+{
+ return AddExpr(MLIL_SET_VAR_SPLIT_SSA, size,
+ AddExpr(MLIL_VAR_SPLIT_DEST_SSA, size, ((uint64_t)high.type << 32) | (uint64_t)high.index,
+ high.identifier, highIndex),
+ AddExpr(MLIL_VAR_SPLIT_DEST_SSA, size, ((uint64_t)low.type << 32) | (uint64_t)low.index,
+ low.identifier, lowIndex), 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);
@@ -127,6 +145,19 @@ ExprId MediumLevelILFunction::VarFieldSSA(size_t size, const BNILVariable& var,
}
+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);
+}
+
+
+ExprId MediumLevelILFunction::AddressOfField(size_t size, const BNILVariable& var, int64_t offset)
+{
+ return AddExpr(MLIL_ADDRESS_OF_FIELD, size, ((uint64_t)var.type << 32) | (uint64_t)var.index,
+ var.identifier, offset);
+}
+
+
ExprId MediumLevelILFunction::Goto(BNMediumLevelILLabel& label)
{
return BNMediumLevelILGoto(m_object, &label);