summaryrefslogtreecommitdiff
path: root/lowlevelil.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2019-08-03 22:40:47 -0400
committerRusty Wagner <rusty@vector35.com>2019-12-19 17:20:53 -0500
commitc69b76dd1a7e1985f58f71c07dfc8b7b0657f57a (patch)
tree25bbbdc261c3b550dd65d66580b016dfb03dade7 /lowlevelil.cpp
parent741fb0538e0ac6ab14928f78697196803dbd2ed5 (diff)
Add data flow query options
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);
}