summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binaryninjaapi.h6
-rw-r--r--binaryninjacore.h1
-rw-r--r--python/workflow.py11
-rw-r--r--rust/src/workflow.rs8
-rw-r--r--workflow.cpp9
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);