From d4f7a4b26baee92d273328a6b24d90f23a9a6c2f Mon Sep 17 00:00:00 2001 From: Xusheng Date: Wed, 9 Apr 2025 12:58:58 +0800 Subject: Expose AnalysisState through the API --- binaryninjaapi.h | 1 + binaryninjacore.h | 1 + binaryview.cpp | 6 ++++++ python/binaryview.py | 5 +++++ 4 files changed, 13 insertions(+) diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 5c292481..2fe2ed09 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -6109,6 +6109,7 @@ namespace BinaryNinja { AnalysisInfo GetAnalysisInfo(); BNAnalysisProgress GetAnalysisProgress(); + BNAnalysisState GetAnalysisState(); Ref GetBackgroundAnalysisTask(); /*! Returns the virtual address of the Function that occurs after the virtual address `addr` diff --git a/binaryninjacore.h b/binaryninjacore.h index 69dd4cc9..73236934 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -5068,6 +5068,7 @@ extern "C" BINARYNINJACOREAPI BNAnalysisInfo* BNGetAnalysisInfo(BNBinaryView* view); BINARYNINJACOREAPI void BNFreeAnalysisInfo(BNAnalysisInfo* info); BINARYNINJACOREAPI BNAnalysisProgress BNGetAnalysisProgress(BNBinaryView* view); + BINARYNINJACOREAPI BNAnalysisState BNGetAnalysisState(BNBinaryView* view); BINARYNINJACOREAPI BNBackgroundTask* BNGetBackgroundAnalysisTask(BNBinaryView* view); BINARYNINJACOREAPI uint64_t BNGetNextFunctionStartAfterAddress(BNBinaryView* view, uint64_t addr); diff --git a/binaryview.cpp b/binaryview.cpp index 241b40ca..7a6f3df3 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -3823,6 +3823,12 @@ BNAnalysisProgress BinaryView::GetAnalysisProgress() } +BNAnalysisState BinaryView::GetAnalysisState() +{ + return BNGetAnalysisState(m_object); +} + + Ref BinaryView::GetBackgroundAnalysisTask() { BNBackgroundTask* task = BNGetBackgroundAnalysisTask(m_object); diff --git a/python/binaryview.py b/python/binaryview.py index b0ca13ef..10cd2fea 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -3371,6 +3371,11 @@ class BinaryView: result = core.BNGetAnalysisProgress(self.handle) return AnalysisProgress(result.state, result.count, result.total) + @property + def analysis_state(self) -> AnalysisState: + """State of current analysis (read-only)""" + return core.BNGetAnalysisState(self.handle) + @property def linear_disassembly(self) -> Iterator['lineardisassembly.LinearDisassemblyLine']: """Iterator for all lines in the linear disassembly of the view""" -- cgit v1.3.1