diff options
| author | Brian Potchik <brian@vector35.com> | 2021-04-20 15:38:21 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2021-04-20 15:38:21 -0400 |
| commit | 33936c204e64b389ec88d37d7787625ed88c4513 (patch) | |
| tree | d966b5a5ee0f249ae2165dd5d85cefb9d92db8bc | |
| parent | 78b7800b6806ed16929bd184f24ed431ab8eb457 (diff) | |
Add support for analysis hold.
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | binaryninjacore.h | 7 | ||||
| -rw-r--r-- | binaryview.cpp | 12 | ||||
| -rw-r--r-- | python/binaryview.py | 30 |
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 |
