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