summaryrefslogtreecommitdiff
path: root/lowlevelil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lowlevelil.cpp')
-rw-r--r--lowlevelil.cpp80
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);
}