summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-08-30 19:30:43 -0400
committerRusty Wagner <rusty@vector35.com>2016-08-30 19:30:43 -0400
commit827662fbb6caa9d0aa3089cafb20a578a68eaee7 (patch)
treeef994eec388aafbc71266a70d4b6dd3f07714e54
parente878199be4a74c880acd5d38c33965b47d7630d0 (diff)
Add API to determine if a function still has analysis updates to complete
-rw-r--r--binaryninjaapi.h1
-rw-r--r--binaryninjacore.h1
-rw-r--r--function.cpp6
-rw-r--r--python/__init__.py5
4 files changed, 13 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 7c951dee..f60ee159 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1611,6 +1611,7 @@ namespace BinaryNinja
bool WasAutomaticallyDiscovered() const;
bool CanReturn() const;
bool HasExplicitlyDefinedType() const;
+ bool NeedsUpdate() const;
std::vector<Ref<BasicBlock>> GetBasicBlocks() const;
void MarkRecentUse();
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 4d8c31d9..c293f940 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -1381,6 +1381,7 @@ extern "C"
BINARYNINJACOREAPI void BNRemoveUserFunction(BNBinaryView* view, BNFunction* func);
BINARYNINJACOREAPI void BNUpdateAnalysis(BNBinaryView* view);
BINARYNINJACOREAPI void BNAbortAnalysis(BNBinaryView* view);
+ BINARYNINJACOREAPI bool BNIsFunctionUpdateNeeded(BNFunction* func);
BINARYNINJACOREAPI BNFunction* BNNewFunctionReference(BNFunction* func);
BINARYNINJACOREAPI void BNFreeFunction(BNFunction* func);
diff --git a/function.cpp b/function.cpp
index 27193992..78a33bda 100644
--- a/function.cpp
+++ b/function.cpp
@@ -72,6 +72,12 @@ bool Function::HasExplicitlyDefinedType() const
}
+bool Function::NeedsUpdate() const
+{
+ return BNIsFunctionUpdateNeeded(m_object);
+}
+
+
vector<Ref<BasicBlock>> Function::GetBasicBlocks() const
{
size_t count;
diff --git a/python/__init__.py b/python/__init__.py
index 092e07c0..e9f036ae 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -4349,6 +4349,11 @@ class Function(object):
return core.BNHasExplicitlyDefinedType(self.handle)
@property
+ def needs_update(self):
+ """Whether the function has analysis that needs to be updated (read-only)"""
+ return core.BNIsFunctionUpdateNeeded(self.handle)
+
+ @property
def basic_blocks(self):
"""List of basic blocks (read-only)"""
count = ctypes.c_ulonglong()