From 3a95d0ae05e21775042176b8f688bafeb3f6d80f Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 7 Mar 2017 02:38:09 -0500 Subject: Add outputs and parameters for call and return, handle aliasing --- mediumlevelil.cpp | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) (limited to 'mediumlevelil.cpp') 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); -- cgit v1.3.1