summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2021-04-20 15:38:21 -0400
committerBrian Potchik <brian@vector35.com>2021-04-20 15:38:21 -0400
commit33936c204e64b389ec88d37d7787625ed88c4513 (patch)
treed966b5a5ee0f249ae2165dd5d85cefb9d92db8bc
parent78b7800b6806ed16929bd184f24ed431ab8eb457 (diff)
Add support for analysis hold.
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryninjacore.h7
-rw-r--r--binaryview.cpp12
-rw-r--r--python/binaryview.py30
4 files changed, 44 insertions, 7 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 07d7ea83..1cb9f1be 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1561,6 +1561,8 @@ __attribute__ ((format (printf, 1, 2)))
void RemoveAnalysisFunction(Function* func);
void CreateUserFunction(Platform* platform, uint64_t start);
void RemoveUserFunction(Function* func);
+ bool HasInitialAnalysis();
+ void SetAnalysisHold(bool enable);
void UpdateAnalysisAndWait();
void UpdateAnalysis();
void AbortAnalysis();
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 5f851591..8318d8e8 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -28,14 +28,14 @@
// Current ABI version for linking to the core. This is incremented any time
// there are changes to the API that affect linking, including new functions,
// new types, or modifications to existing functions or types.
-#define BN_CURRENT_CORE_ABI_VERSION 5
+#define BN_CURRENT_CORE_ABI_VERSION 6
// Minimum ABI version that is supported for loading of plugins. Plugins that
// are linked to an ABI version less than this will not be able to load and
// will require rebuilding. The minimum version is increased when there are
// incompatible changes that break binary compatibility, such as changes to
// existing types or functions.
-#define BN_MINIMUM_CORE_ABI_VERSION 4
+#define BN_MINIMUM_CORE_ABI_VERSION 5
#ifdef __GNUC__
# ifdef BINARYNINJACORE_LIBRARY
@@ -2079,6 +2079,7 @@ extern "C"
enum BNAnalysisState
{
InitialState,
+ HoldState,
IdleState,
DisassembleState,
AnalyzeState,
@@ -3095,6 +3096,8 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI void BNRemoveAnalysisFunction(BNBinaryView* view, BNFunction* func);
BINARYNINJACOREAPI void BNCreateUserFunction(BNBinaryView* view, BNPlatform* platform, uint64_t addr);
BINARYNINJACOREAPI void BNRemoveUserFunction(BNBinaryView* view, BNFunction* func);
+ BINARYNINJACOREAPI bool BNHasInitialAnalysis(BNBinaryView* view);
+ BINARYNINJACOREAPI void BNSetAnalysisHold(BNBinaryView* view, bool enable);
BINARYNINJACOREAPI void BNUpdateAnalysisAndWait(BNBinaryView* view);
BINARYNINJACOREAPI void BNUpdateAnalysis(BNBinaryView* view);
BINARYNINJACOREAPI void BNAbortAnalysis(BNBinaryView* view);
diff --git a/binaryview.cpp b/binaryview.cpp
index f791090b..26ace8a9 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1499,6 +1499,18 @@ void BinaryView::RemoveUserFunction(Function* func)
}
+bool BinaryView::HasInitialAnalysis()
+{
+ return BNHasInitialAnalysis(m_object);
+}
+
+
+void BinaryView::SetAnalysisHold(bool enable)
+{
+ BNSetAnalysisHold(m_object, enable);
+}
+
+
void BinaryView::UpdateAnalysisAndWait()
{
BNUpdateAnalysisAndWait(m_object);
diff --git a/python/binaryview.py b/python/binaryview.py
index bf07a3ad..463df925 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -386,15 +386,17 @@ class AnalysisProgress(object):
self._total = total
def __str__(self):
+ if self._state == AnalysisState.InitialState:
+ return "Initial"
+ if self._state == AnalysisState.HoldState:
+ return "Hold"
+ if self._state == AnalysisState.IdleState:
+ return "Idle"
if self._state == AnalysisState.DisassembleState:
return "Disassembling (%d/%d)" % (self._count, self._total)
if self._state == AnalysisState.AnalyzeState:
return "Analyzing (%d/%d)" % (self._count, self._total)
- if self._state == AnalysisState.ExtendedAnalyzeState:
- return "Extended Analysis"
- if self._state == AnalysisState.IdleState:
- return "Idle"
- return "Initial"
+ return "Extended Analysis"
def __repr__(self):
return "<progress: %s>" % str(self)
@@ -3116,6 +3118,24 @@ class BinaryView(object):
"""
core.BNAddAnalysisOption(self.handle, name)
+ def has_initial_analysis(self):
+ """
+ ``has_initial_analysis`` check for the presence of an initial analysis in this BinaryView.
+
+ :return: True if the BinaryView has a valid initial analysis, False otherwise
+ :rtype: bool
+ """
+ return core.BNHasInitialAnalysis(self.handle)
+
+ def set_analysis_hold(self, enable):
+ """
+ ``set_analysis_hold`` control the analysis hold for this BinaryView. Enabling analysis hold defers all future
+ analysis updates, therefore causing :func:`update_analysis` or :func:`update_analysis_and_wait` to take no action.
+
+ :rtype: None
+ """
+ core.BNSetAnalysisHold(self.handle, enable)
+
def update_analysis(self):
"""
``update_analysis`` asynchronously starts the analysis running and returns immediately. Analysis of BinaryViews