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 /lowlevelil.cpp | |
| parent | 741fb0538e0ac6ab14928f78697196803dbd2ed5 (diff) | |
Add data flow query options
Diffstat (limited to 'lowlevelil.cpp')
| -rw-r--r-- | lowlevelil.cpp | 80 |
1 files changed, 64 insertions, 16 deletions
diff --git a/lowlevelil.cpp b/lowlevelil.cpp index afaacf08..0ea395f8 100644 --- a/lowlevelil.cpp +++ b/lowlevelil.cpp @@ -623,16 +623,22 @@ RegisterValue LowLevelILFunction::GetExprValue(const LowLevelILInstruction& expr } -PossibleValueSet LowLevelILFunction::GetPossibleExprValues(size_t expr) +PossibleValueSet LowLevelILFunction::GetPossibleExprValues(size_t expr, const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetLowLevelILPossibleExprValues(m_object, expr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetLowLevelILPossibleExprValues(m_object, expr, optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet LowLevelILFunction::GetPossibleExprValues(const LowLevelILInstruction& expr) +PossibleValueSet LowLevelILFunction::GetPossibleExprValues(const LowLevelILInstruction& expr, + const set<BNDataFlowQueryOption>& options) { - return GetPossibleExprValues(expr.exprIndex); + return GetPossibleExprValues(expr.exprIndex, options); } @@ -650,16 +656,30 @@ RegisterValue LowLevelILFunction::GetRegisterValueAfterInstruction(uint32_t reg, } -PossibleValueSet LowLevelILFunction::GetPossibleRegisterValuesAtInstruction(uint32_t reg, size_t instr) +PossibleValueSet LowLevelILFunction::GetPossibleRegisterValuesAtInstruction(uint32_t reg, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetLowLevelILPossibleRegisterValuesAtInstruction(m_object, reg, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetLowLevelILPossibleRegisterValuesAtInstruction(m_object, reg, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet LowLevelILFunction::GetPossibleRegisterValuesAfterInstruction(uint32_t reg, size_t instr) +PossibleValueSet LowLevelILFunction::GetPossibleRegisterValuesAfterInstruction(uint32_t reg, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetLowLevelILPossibleRegisterValuesAfterInstruction(m_object, reg, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetLowLevelILPossibleRegisterValuesAfterInstruction(m_object, reg, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } @@ -678,16 +698,30 @@ RegisterValue LowLevelILFunction::GetFlagValueAfterInstruction(uint32_t flag, si } -PossibleValueSet LowLevelILFunction::GetPossibleFlagValuesAtInstruction(uint32_t flag, size_t instr) +PossibleValueSet LowLevelILFunction::GetPossibleFlagValuesAtInstruction(uint32_t flag, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetLowLevelILPossibleFlagValuesAtInstruction(m_object, flag, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetLowLevelILPossibleFlagValuesAtInstruction(m_object, flag, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet LowLevelILFunction::GetPossibleFlagValuesAfterInstruction(uint32_t flag, size_t instr) +PossibleValueSet LowLevelILFunction::GetPossibleFlagValuesAfterInstruction(uint32_t flag, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetLowLevelILPossibleFlagValuesAfterInstruction(m_object, flag, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetLowLevelILPossibleFlagValuesAfterInstruction(m_object, flag, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } @@ -706,16 +740,30 @@ RegisterValue LowLevelILFunction::GetStackContentsAfterInstruction(int32_t offse } -PossibleValueSet LowLevelILFunction::GetPossibleStackContentsAtInstruction(int32_t offset, size_t len, size_t instr) +PossibleValueSet LowLevelILFunction::GetPossibleStackContentsAtInstruction(int32_t offset, size_t len, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetLowLevelILPossibleStackContentsAtInstruction(m_object, offset, len, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetLowLevelILPossibleStackContentsAtInstruction(m_object, offset, len, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } -PossibleValueSet LowLevelILFunction::GetPossibleStackContentsAfterInstruction(int32_t offset, size_t len, size_t instr) +PossibleValueSet LowLevelILFunction::GetPossibleStackContentsAfterInstruction(int32_t offset, size_t len, size_t instr, + const set<BNDataFlowQueryOption>& options) { - BNPossibleValueSet value = BNGetLowLevelILPossibleStackContentsAfterInstruction(m_object, offset, len, instr); + BNDataFlowQueryOption* optionArray = new BNDataFlowQueryOption[options.size()]; + size_t idx = 0; + for (auto i : options) + optionArray[idx++] = i; + BNPossibleValueSet value = BNGetLowLevelILPossibleStackContentsAfterInstruction(m_object, offset, len, instr, + optionArray, options.size()); + delete[] optionArray; return PossibleValueSet::FromAPIObject(value); } |
