diff 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); } |
