diff options
| -rw-r--r-- | binaryninjaapi.h | 6 | ||||
| -rw-r--r-- | binaryninjacore.h | 1 | ||||
| -rw-r--r-- | python/workflow.py | 11 | ||||
| -rw-r--r-- | rust/src/workflow.rs | 8 | ||||
| -rw-r--r-- | workflow.cpp | 9 |
5 files changed, 35 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index e67a836e..bcd1ec97 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -9802,6 +9802,12 @@ namespace BinaryNinja { AnalysisContext(BNAnalysisContext* analysisContext); virtual ~AnalysisContext(); + /*! Get the BinaryView for the current AnalysisContext + + \return The binary view for the current context + */ + Ref<BinaryView> GetBinaryView(); + /*! Get the Function for the current AnalysisContext \return The function for the current context diff --git a/binaryninjacore.h b/binaryninjacore.h index 193b95e9..b27351ab 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -5371,6 +5371,7 @@ extern "C" BINARYNINJACOREAPI BNAnalysisContext* BNCreateAnalysisContext(void); BINARYNINJACOREAPI BNAnalysisContext* BNNewAnalysisContextReference(BNAnalysisContext* analysisContext); BINARYNINJACOREAPI void BNFreeAnalysisContext(BNAnalysisContext* analysisContext); + BINARYNINJACOREAPI BNBinaryView* BNAnalysisContextGetBinaryView(BNAnalysisContext* analysisContext); BINARYNINJACOREAPI BNFunction* BNAnalysisContextGetFunction(BNAnalysisContext* analysisContext); BINARYNINJACOREAPI BNLowLevelILFunction* BNAnalysisContextGetLowLevelILFunction(BNAnalysisContext* analysisContext); BINARYNINJACOREAPI BNMediumLevelILFunction* BNAnalysisContextGetMediumLevelILFunction( diff --git a/python/workflow.py b/python/workflow.py index 98e3118b..7989d6bd 100644 --- a/python/workflow.py +++ b/python/workflow.py @@ -31,6 +31,7 @@ from .log import log_error from . import _binaryninjacore as core from .flowgraph import FlowGraph, CoreFlowGraph +from . import binaryview from . import function as _function from . import lowlevelil from . import mediumlevelil @@ -49,6 +50,16 @@ class AnalysisContext: self.handle = handle @property + def view(self) -> 'binaryview.BinaryView': + """ + BinaryView for the current AnalysisContext (writable) + """ + result = core.BNAnalysisContextGetBinaryView(self.handle) + if not result: + return None + return binaryview.BinaryView(handle=result) + + @property def function(self) -> '_function.Function': """ Function for the current AnalysisContext (read-only) diff --git a/rust/src/workflow.rs b/rust/src/workflow.rs index b3a17a77..8409ad70 100644 --- a/rust/src/workflow.rs +++ b/rust/src/workflow.rs @@ -10,6 +10,7 @@ use crate::llil::{self, FunctionForm, Mutable}; use crate::rc::{Array, CoreArrayProvider, CoreArrayProviderInner, Guard, Ref, RefCountable}; use crate::string::{BnStrCompatible, BnString}; use crate::{hlil, mlil}; +use crate::binaryview::BinaryView; #[repr(transparent)] /// The AnalysisContext struct is used to represent the current state of @@ -29,6 +30,13 @@ impl AnalysisContext { Ref::new(Self { handle }) } + /// BinaryView for the current AnalysisContext + pub fn view(&self) -> Ref<BinaryView> { + let result = unsafe { BNAnalysisContextGetBinaryView(self.handle.as_ptr()) }; + assert!(!result.is_null()); + unsafe { BinaryView::from_raw(result) } + } + /// Function for the current AnalysisContext pub fn function(&self) -> Ref<Function> { let result = unsafe { BNAnalysisContextGetFunction(self.handle.as_ptr()) }; diff --git a/workflow.cpp b/workflow.cpp index 90ddb024..a0521ac4 100644 --- a/workflow.cpp +++ b/workflow.cpp @@ -23,6 +23,15 @@ AnalysisContext::~AnalysisContext() } +Ref<BinaryView> AnalysisContext::GetBinaryView() +{ + BNBinaryView* view = BNAnalysisContextGetBinaryView(m_object); + if (!view) + return nullptr; + return new BinaryView(view); +} + + Ref<Function> AnalysisContext::GetFunction() { BNFunction* func = BNAnalysisContextGetFunction(m_object); |
