diff options
| author | Rusty Wagner <rusty@vector35.com> | 2019-08-03 22:40:47 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-12-19 17:20:53 -0500 |
| commit | c69b76dd1a7e1985f58f71c07dfc8b7b0657f57a (patch) | |
| tree | 25bbbdc261c3b550dd65d66580b016dfb03dade7 /mediumlevelil.cpp | |
| parent | 741fb0538e0ac6ab14928f78697196803dbd2ed5 (diff) | |
Add data flow query options
Diffstat (limited to 'mediumlevelil.cpp')
| -rw-r--r-- | mediumlevelil.cpp | 92 |
1 files changed, 74 insertions, 18 deletions
diff --git a/mediumlevelil.cpp b/mediumlevelil.cpp index 6ce556f4..ce37f7e0 100644 --- a/mediumlevelil.cpp +++ b/mediumlevelil.cpp @@ -544,23 +544,37 @@ RegisterValue MediumLevelILFunction::GetExprValue(const MediumLevelILInstruction } -PossibleValueSet MediumLevelILFunction::GetPossibleSSAVarValues(const SSAVariable& var, size_t instr) +PossibleValueSet MediumLevelILFunction::GetPossibleSSAVarValues(const SSAVariable& var, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetMediumLevelILPossibleSSAVarValues(m_object, &var.var, var.version, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetMediumLevelILPossibleSSAVarValues(m_object, &var.var, var.version, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet MediumLevelILFunction::GetPossibleExprValues(size_t expr) +PossibleValueSet MediumLevelILFunction::GetPossibleExprValues(size_t expr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetMediumLevelILPossibleExprValues(m_object, expr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetMediumLevelILPossibleExprValues(m_object, expr, optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet MediumLevelILFunction::GetPossibleExprValues(const MediumLevelILInstruction& expr) +PossibleValueSet MediumLevelILFunction::GetPossibleExprValues(const MediumLevelILInstruction& expr, + const set<BNDataFlowQueryOption>& options) { - return GetPossibleExprValues(expr.exprIndex); + return GetPossibleExprValues(expr.exprIndex, options); } @@ -608,16 +622,30 @@ RegisterValue MediumLevelILFunction::GetRegisterValueAfterInstruction(uint32_t r } -PossibleValueSet MediumLevelILFunction::GetPossibleRegisterValuesAtInstruction(uint32_t reg, size_t instr) +PossibleValueSet MediumLevelILFunction::GetPossibleRegisterValuesAtInstruction(uint32_t reg, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetMediumLevelILPossibleRegisterValuesAtInstruction(m_object, reg, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetMediumLevelILPossibleRegisterValuesAtInstruction(m_object, reg, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet MediumLevelILFunction::GetPossibleRegisterValuesAfterInstruction(uint32_t reg, size_t instr) +PossibleValueSet MediumLevelILFunction::GetPossibleRegisterValuesAfterInstruction(uint32_t reg, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetMediumLevelILPossibleRegisterValuesAfterInstruction(m_object, reg, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetMediumLevelILPossibleRegisterValuesAfterInstruction(m_object, reg, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } @@ -636,16 +664,30 @@ RegisterValue MediumLevelILFunction::GetFlagValueAfterInstruction(uint32_t flag, } -PossibleValueSet MediumLevelILFunction::GetPossibleFlagValuesAtInstruction(uint32_t flag, size_t instr) +PossibleValueSet MediumLevelILFunction::GetPossibleFlagValuesAtInstruction(uint32_t flag, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetMediumLevelILPossibleFlagValuesAtInstruction(m_object, flag, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetMediumLevelILPossibleFlagValuesAtInstruction(m_object, flag, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet MediumLevelILFunction::GetPossibleFlagValuesAfterInstruction(uint32_t flag, size_t instr) +PossibleValueSet MediumLevelILFunction::GetPossibleFlagValuesAfterInstruction(uint32_t flag, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetMediumLevelILPossibleFlagValuesAfterInstruction(m_object, flag, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetMediumLevelILPossibleFlagValuesAfterInstruction(m_object, flag, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } @@ -664,16 +706,30 @@ RegisterValue MediumLevelILFunction::GetStackContentsAfterInstruction(int32_t of } -PossibleValueSet MediumLevelILFunction::GetPossibleStackContentsAtInstruction(int32_t offset, size_t len, size_t instr) +PossibleValueSet MediumLevelILFunction::GetPossibleStackContentsAtInstruction(int32_t offset, size_t len, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetMediumLevelILPossibleStackContentsAtInstruction(m_object, offset, len, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetMediumLevelILPossibleStackContentsAtInstruction(m_object, offset, len, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet MediumLevelILFunction::GetPossibleStackContentsAfterInstruction(int32_t offset, size_t len, size_t instr) +PossibleValueSet MediumLevelILFunction::GetPossibleStackContentsAfterInstruction(int32_t offset, size_t len, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetMediumLevelILPossibleStackContentsAfterInstruction(m_object, offset, len, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetMediumLevelILPossibleStackContentsAfterInstruction(m_object, offset, len, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } |
