diff options
| author | Rusty Wagner <rusty@vector35.com> | 2017-03-02 00:37:46 -0500 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2017-03-02 00:37:46 -0500 |
| commit | 7aab4e4a3f8f2daadd1fbd00259da5b01090d84c (patch) | |
| tree | 7b9db291c184b44b6b2a4a9f2af66e5d9bc6b464 /mediumlevelil.cpp | |
| parent | 94b38cee51eff16f1e79945806088c7ae60016d7 (diff) | |
Adding MLIL instructions, moving stack contents data flow to a later stage
Diffstat (limited to 'mediumlevelil.cpp')
| -rw-r--r-- | mediumlevelil.cpp | 31 |
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); |
