summaryrefslogtreecommitdiff
path: root/mediumlevelil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mediumlevelil.cpp')
-rw-r--r--mediumlevelil.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/mediumlevelil.cpp b/mediumlevelil.cpp
index 75c99a54..b4abaa72 100644
--- a/mediumlevelil.cpp
+++ b/mediumlevelil.cpp
@@ -178,6 +178,7 @@ bool MediumLevelILFunction::GetExprText(Architecture* arch, ExprId expr, vector<
token.size = list[i].size;
token.operand = list[i].operand;
token.context = list[i].context;
+ token.confidence = list[i].confidence;
token.address = list[i].address;
tokens.push_back(token);
}
@@ -206,6 +207,7 @@ bool MediumLevelILFunction::GetInstructionText(Function* func, Architecture* arc
token.size = list[i].size;
token.operand = list[i].operand;
token.context = list[i].context;
+ token.confidence = list[i].confidence;
token.address = list[i].address;
tokens.push_back(token);
}
@@ -311,6 +313,34 @@ set<size_t> MediumLevelILFunction::GetSSAMemoryUses(size_t version) const
}
+set<size_t> MediumLevelILFunction::GetVariableDefinitions(const Variable& var) const
+{
+ size_t count;
+ size_t* instrs = BNGetMediumLevelILVariableDefinitions(m_object, &var, &count);
+
+ set<size_t> result;
+ for (size_t i = 0; i < count; i++)
+ result.insert(instrs[i]);
+
+ BNFreeILInstructionList(instrs);
+ return result;
+}
+
+
+set<size_t> MediumLevelILFunction::GetVariableUses(const Variable& var) const
+{
+ size_t count;
+ size_t* instrs = BNGetMediumLevelILVariableUses(m_object, &var, &count);
+
+ set<size_t> result;
+ for (size_t i = 0; i < count; i++)
+ result.insert(instrs[i]);
+
+ BNFreeILInstructionList(instrs);
+ return result;
+}
+
+
RegisterValue MediumLevelILFunction::GetSSAVarValue(const Variable& var, size_t version)
{
BNRegisterValue value = BNGetMediumLevelILSSAVarValue(m_object, &var, version);
@@ -492,3 +522,12 @@ size_t MediumLevelILFunction::GetLowLevelILExprIndex(size_t expr) const
{
return BNGetLowLevelILExprIndex(m_object, expr);
}
+
+
+Confidence<Ref<Type>> MediumLevelILFunction::GetExprType(size_t expr)
+{
+ BNTypeWithConfidence result = BNGetMediumLevelILExprType(m_object, expr);
+ if (!result.type)
+ return nullptr;
+ return Confidence<Ref<Type>>(new Type(result.type), result.confidence);
+}