summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-06-30 17:15:19 -0400
committerRusty Wagner <rusty@vector35.com>2016-06-30 17:15:32 -0400
commita7eaa72caa4a5e3e7cd7ea7c32236c93b06d1442 (patch)
treeef0178c735374bc86f499379a342e6a61b916367
parent32153536526753edc3e80ea43512ad7ab65a3271 (diff)
Add API for analysis progress
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryninjacore.h15
-rw-r--r--binaryview.cpp6
-rw-r--r--python/__init__.py22
4 files changed, 45 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index f0ad784f..3f0b1f4b 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -809,6 +809,8 @@ namespace BinaryNinja
std::vector<BNStringReference> GetStrings(uint64_t start, uint64_t len);
Ref<AnalysisCompletionEvent> AddAnalysisCompletionEvent(const std::function<void()>& callback);
+
+ BNAnalysisProgress GetAnalysisProgress();
};
class BinaryData: public BinaryView
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 6a1e6a63..048255b1 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -735,6 +735,19 @@ extern "C"
uint64_t address;
};
+ enum BNAnalysisState
+ {
+ IdleState,
+ DisassembleState,
+ AnalyzeState
+ };
+
+ struct BNAnalysisProgress
+ {
+ BNAnalysisState state;
+ size_t count, total;
+ };
+
BINARYNINJACOREAPI char* BNAllocString(const char* contents);
BINARYNINJACOREAPI void BNFreeString(char* str);
@@ -1211,6 +1224,8 @@ extern "C"
BINARYNINJACOREAPI void BNFreeAnalysisCompletionEvent(BNAnalysisCompletionEvent* event);
BINARYNINJACOREAPI void BNCancelAnalysisCompletionEvent(BNAnalysisCompletionEvent* event);
+ BINARYNINJACOREAPI BNAnalysisProgress BNGetAnalysisProgress(BNBinaryView* view);
+
// Function graph
BINARYNINJACOREAPI BNFunctionGraph* BNCreateFunctionGraph(BNFunction* func);
BINARYNINJACOREAPI BNFunctionGraph* BNNewFunctionGraphReference(BNFunctionGraph* graph);
diff --git a/binaryview.cpp b/binaryview.cpp
index 9a9461a4..a3abc02a 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1094,6 +1094,12 @@ Ref<AnalysisCompletionEvent> BinaryView::AddAnalysisCompletionEvent(const functi
}
+BNAnalysisProgress BinaryView::GetAnalysisProgress()
+{
+ return BNGetAnalysisProgress(m_object);
+}
+
+
BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetObject()))
{
}
diff --git a/python/__init__.py b/python/__init__.py
index 3d2123b3..e07bd7c5 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -650,6 +650,22 @@ class AnalysisCompletionEvent(object):
self.callback = self._empty_callback
core.BNCancelAnalysisCompletionEvent(self.handle)
+class AnalysisProgress(object):
+ def __init__(self, state, count, total):
+ self.state = state
+ self.count = count
+ self.total = total
+
+ def __str__(self):
+ if self.state == core.DisassembleState:
+ return "Disassembling (%d/%d)" % (self.count, self.total)
+ if self.state == core.AnalyzeState:
+ return "Analyzing (%d/%d)" % (self.count, self.total)
+ return "Idle"
+
+ def __repr__(self):
+ return "<progress: %s>" % str(self)
+
class BinaryView(object):
name = None
"""Binary View name"""
@@ -928,6 +944,12 @@ class BinaryView(object):
def saved(self, value):
self.file.saved = value
+ @property
+ def analysis_progress(self):
+ """Status of current analysis (read-only)"""
+ result = core.BNGetAnalysisProgress(self.handle)
+ return AnalysisProgress(result.state, result.count, result.total)
+
def __len__(self):
return int(core.BNGetViewLength(self.handle))