summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyleMiles <krm504@nyu.edu>2022-10-04 15:27:43 -0400
committerKyleMiles <krm504@nyu.edu>2022-10-04 16:53:41 -0400
commite8ed4b8e75fc6d8dd050a5a6804e9691706317c8 (patch)
treecfadb2011031aaa312f29ccf0c25258b77f5e7f3
parent3104042adab833e73a71738f57070ab881ade615 (diff)
Add API bindings for `BNBinaryViewGetDefaultLoadSettings` for force API actions to load default load settings
-rw-r--r--binaryninjaapi.h11
-rw-r--r--binaryninjacore.h11
-rw-r--r--binaryview.cpp30
-rw-r--r--python/binaryview.py24
-rw-r--r--rust/src/binaryview.rs24
5 files changed, 72 insertions, 28 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index b58db5cb..46e3fedf 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -4297,6 +4297,7 @@ namespace BinaryNinja {
std::vector<std::string> GetLoadSettingsTypeNames();
Ref<Settings> GetLoadSettings(const std::string& typeName);
void SetLoadSettings(const std::string& typeName, Ref<Settings> settings);
+ Ref<Settings> GetDefaultLoadSettings(const std::string& typeName, Ref<Settings> settings = nullptr);
BNAnalysisParameters GetParametersForAnalysis();
void SetParametersForAnalysis(BNAnalysisParameters params);
@@ -4407,11 +4408,11 @@ namespace BinaryNinja {
class BinaryData : public BinaryView
{
public:
- BinaryData(FileMetadata* file);
- BinaryData(FileMetadata* file, const DataBuffer& data);
- BinaryData(FileMetadata* file, const void* data, size_t len);
- BinaryData(FileMetadata* file, const std::string& path);
- BinaryData(FileMetadata* file, FileAccessor* accessor);
+ BinaryData(FileMetadata* file, bool setDefaultLoadSettings = false);
+ BinaryData(FileMetadata* file, const DataBuffer& data, bool setDefaultLoadSettings = false);
+ BinaryData(FileMetadata* file, const void* data, size_t len, bool setDefaultLoadSettings = false);
+ BinaryData(FileMetadata* file, const std::string& path, bool setDefaultLoadSettings = false);
+ BinaryData(FileMetadata* file, FileAccessor* accessor, bool setDefaultLoadSettings = false);
};
class Platform;
diff --git a/binaryninjacore.h b/binaryninjacore.h
index e49a020b..f7d1a75f 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -3378,11 +3378,11 @@ extern "C"
BINARYNINJACOREAPI BNRegisterValueWithConfidence BNGetGlobalPointerValue(BNBinaryView* view);
// Raw binary data view
- BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataView(BNFileMetadata* file);
- BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromBuffer(BNFileMetadata* file, BNDataBuffer* buf);
- BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromData(BNFileMetadata* file, const void* data, size_t len);
- BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromFilename(BNFileMetadata* file, const char* filename);
- BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromFile(BNFileMetadata* file, BNFileAccessor* accessor);
+ BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataView(BNFileMetadata* file, bool setDefaultLoadSettings);
+ BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromBuffer(BNFileMetadata* file, BNDataBuffer* buf, bool setDefaultLoadSettings);
+ BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromData(BNFileMetadata* file, const void* data, size_t len, bool setDefaultLoadSettings);
+ BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromFilename(BNFileMetadata* file, const char* filename, bool setDefaultLoadSettings);
+ BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromFile(BNFileMetadata* file, BNFileAccessor* accessor, bool setDefaultLoadSettings);
// Creation of new types of binary views
BINARYNINJACOREAPI BNBinaryView* BNCreateCustomBinaryView(
@@ -6182,6 +6182,7 @@ extern "C"
BINARYNINJACOREAPI char** BNBinaryViewGetLoadSettingsTypeNames(BNBinaryView* view, size_t* count);
BINARYNINJACOREAPI BNSettings* BNBinaryViewGetLoadSettings(BNBinaryView* view, const char* typeName);
BINARYNINJACOREAPI void BNBinaryViewSetLoadSettings(BNBinaryView* view, const char* typeName, BNSettings* settings);
+ BINARYNINJACOREAPI BNSettings* BNBinaryViewGetDefaultLoadSettings(BNBinaryView* view, const char* typeName, BNSettings* settings);
// Relocation object methods
BINARYNINJACOREAPI BNRelocation* BNNewRelocationReference(BNRelocation* reloc);
diff --git a/binaryview.cpp b/binaryview.cpp
index b8dd7c1a..8b1fad53 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -4042,6 +4042,16 @@ void BinaryView::SetLoadSettings(const string& typeName, Ref<Settings> settings)
}
+Ref<Settings> BinaryView::GetDefaultLoadSettings(const string& typeName, Ref<Settings> settings)
+{
+ BNSettings* defaultSettings =
+ BNBinaryViewGetDefaultLoadSettings(m_object, typeName.c_str(), settings ? settings->GetObject() : nullptr);
+ if (!defaultSettings)
+ return nullptr;
+ return new Settings(defaultSettings);
+}
+
+
BNAnalysisParameters BinaryView::GetParametersForAnalysis()
{
return BNGetParametersForAnalysis(m_object);
@@ -4189,26 +4199,28 @@ Ref<Symbol> Relocation::GetSymbol() const
}
-BinaryData::BinaryData(FileMetadata* file) : BinaryView(BNCreateBinaryDataView(file->GetObject())) {}
+BinaryData::BinaryData(FileMetadata* file, bool setDefaultLoadSettings) :
+ BinaryView(BNCreateBinaryDataView(file->GetObject(), setDefaultLoadSettings))
+{}
-BinaryData::BinaryData(FileMetadata* file, const DataBuffer& data) :
- BinaryView(BNCreateBinaryDataViewFromBuffer(file->GetObject(), data.GetBufferObject()))
+BinaryData::BinaryData(FileMetadata* file, const DataBuffer& data, bool setDefaultLoadSettings) :
+ BinaryView(BNCreateBinaryDataViewFromBuffer(file->GetObject(), data.GetBufferObject(), setDefaultLoadSettings))
{}
-BinaryData::BinaryData(FileMetadata* file, const void* data, size_t len) :
- BinaryView(BNCreateBinaryDataViewFromData(file->GetObject(), data, len))
+BinaryData::BinaryData(FileMetadata* file, const void* data, size_t len, bool setDefaultLoadSettings) :
+ BinaryView(BNCreateBinaryDataViewFromData(file->GetObject(), data, len, setDefaultLoadSettings))
{}
-BinaryData::BinaryData(FileMetadata* file, const string& path) :
- BinaryView(BNCreateBinaryDataViewFromFilename(file->GetObject(), path.c_str()))
+BinaryData::BinaryData(FileMetadata* file, const string& path, bool setDefaultLoadSettings) :
+ BinaryView(BNCreateBinaryDataViewFromFilename(file->GetObject(), path.c_str(), setDefaultLoadSettings))
{}
-BinaryData::BinaryData(FileMetadata* file, FileAccessor* accessor) :
- BinaryView(BNCreateBinaryDataViewFromFile(file->GetObject(), accessor->GetCallbacks()))
+BinaryData::BinaryData(FileMetadata* file, FileAccessor* accessor, bool setDefaultLoadSettings) :
+ BinaryView(BNCreateBinaryDataViewFromFile(file->GetObject(), accessor->GetCallbacks(), setDefaultLoadSettings))
{}
diff --git a/python/binaryview.py b/python/binaryview.py
index 02b1cc53..02255b95 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -1956,7 +1956,7 @@ class BinaryView:
binaryninja._init_plugins()
if file_metadata is None:
file_metadata = filemetadata.FileMetadata()
- _handle = core.BNCreateBinaryDataView(file_metadata.handle)
+ _handle = core.BNCreateBinaryDataView(file_metadata.handle, True)
self._file = filemetadata.FileMetadata(handle=core.BNNewFileReference(file_metadata.handle))
else:
binaryninja._init_plugins()
@@ -2223,11 +2223,11 @@ class BinaryView:
if isinstance(src, fileaccessor.FileAccessor):
if file_metadata is None:
file_metadata = filemetadata.FileMetadata()
- view = core.BNCreateBinaryDataViewFromFile(file_metadata.handle, src._cb)
+ view = core.BNCreateBinaryDataViewFromFile(file_metadata.handle, src._cb, True)
else:
if file_metadata is None:
file_metadata = filemetadata.FileMetadata(str(src))
- view = core.BNCreateBinaryDataViewFromFilename(file_metadata.handle, str(src))
+ view = core.BNCreateBinaryDataViewFromFilename(file_metadata.handle, str(src), True)
if view is None:
return None
return BinaryView(file_metadata=file_metadata, handle=view)
@@ -2238,12 +2238,12 @@ class BinaryView:
if file_metadata is None:
file_metadata = filemetadata.FileMetadata()
if data is None:
- view = core.BNCreateBinaryDataView(file_metadata.handle)
+ view = core.BNCreateBinaryDataView(file_metadata.handle, True)
elif isinstance(data, databuffer.DataBuffer):
- view = core.BNCreateBinaryDataViewFromBuffer(file_metadata.handle, data.handle)
+ view = core.BNCreateBinaryDataViewFromBuffer(file_metadata.handle, data.handle, True)
else:
buf = databuffer.DataBuffer(data)
- view = core.BNCreateBinaryDataViewFromBuffer(file_metadata.handle, buf.handle)
+ view = core.BNCreateBinaryDataViewFromBuffer(file_metadata.handle, buf.handle, True)
if view is None:
return None
return BinaryView(file_metadata=file_metadata, handle=view)
@@ -7808,6 +7808,18 @@ class BinaryView:
settings = settings.handle
core.BNBinaryViewSetLoadSettings(self.handle, type_name, settings)
+ def get_default_load_settings(self, type_name: str, settings: settings.Settings) -> None:
+ """
+ ``get_default_load_settings`` retrieve a :py:class:`Settings` object which defines the load settings for the given :py:class:`BinaryViewType` ``type_name``
+
+ :param str type_name: the :py:class:`BinaryViewType` name
+ :param Settings settings: the load settings
+ :rtype: :py:class:`Settings`, or ``None``
+ """
+ if settings is not None:
+ settings = settings.handle
+ core.BNBinaryViewGetDefaultLoadSettings(self.handle, type_name, settings)
+
def parse_expression(self, expression: str, here: int = 0) -> int:
r"""
Evaluates a string expression to an integer value.
diff --git a/rust/src/binaryview.rs b/rust/src/binaryview.rs
index fa770b52..bee5914a 100644
--- a/rust/src/binaryview.rs
+++ b/rust/src/binaryview.rs
@@ -690,6 +690,24 @@ pub trait BinaryViewExt: BinaryViewBase {
};
}
+ fn get_default_load_settings<S: BnStrCompatible>(&self, view_type_name: S, settings: &Settings) -> Result<Ref<Settings>>{
+ let view_type_name = view_type_name.into_bytes_with_nul();
+
+ let settings_handle = unsafe {
+ BNBinaryViewGetDefaultLoadSettings(
+ self.as_ref().handle,
+ view_type_name.as_ref().as_ptr() as *mut _,
+ settings.handle,
+ )
+ };
+
+ if settings_handle.is_null() {
+ Err(())
+ } else {
+ Ok(unsafe { Settings::from_raw(settings_handle) })
+ }
+ }
+
/// Creates a new [TagType] and adds it to the view.
///
/// # Arguments
@@ -912,7 +930,7 @@ impl BinaryView {
let file = filename.into_bytes_with_nul();
let handle = unsafe {
- BNCreateBinaryDataViewFromFilename(meta.handle, file.as_ref().as_ptr() as *mut _)
+ BNCreateBinaryDataViewFromFilename(meta.handle, file.as_ref().as_ptr() as *mut _, true)
};
if handle.is_null() {
@@ -924,7 +942,7 @@ impl BinaryView {
pub fn from_accessor(meta: &FileMetadata, file: &mut FileAccessor) -> Result<Ref<Self>> {
let handle =
- unsafe { BNCreateBinaryDataViewFromFile(meta.handle, &mut file.api_object as *mut _) };
+ unsafe { BNCreateBinaryDataViewFromFile(meta.handle, &mut file.api_object as *mut _, true) };
if handle.is_null() {
return Err(());
@@ -935,7 +953,7 @@ impl BinaryView {
pub fn from_data(meta: &FileMetadata, data: &[u8]) -> Result<Ref<Self>> {
let handle = unsafe {
- BNCreateBinaryDataViewFromData(meta.handle, data.as_ptr() as *mut _, data.len())
+ BNCreateBinaryDataViewFromData(meta.handle, data.as_ptr() as *mut _, data.len(), true)
};
if handle.is_null() {