summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2019-09-11 11:38:45 -0400
committerBrian Potchik <brian@vector35.com>2019-09-11 11:38:45 -0400
commit5d01e8e553280f1f9e7676ea32af183f6e23efd7 (patch)
tree3b271faab8b8cc76600c84caf7553877fcd7958e
parent162ad8604bdbcb1fb36c899e92f5606cd6f231eb (diff)
Add ability to open a database with options.
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryninjacore.h2
-rw-r--r--binaryview.cpp14
-rw-r--r--filemetadata.cpp9
-rw-r--r--python/binaryview.py13
-rw-r--r--python/filemetadata.py6
6 files changed, 44 insertions, 2 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index cc5ff914..a7d66e9b 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -886,6 +886,7 @@ namespace BinaryNinja
Ref<BinaryView> OpenExistingDatabase(const std::string& path);
Ref<BinaryView> OpenExistingDatabase(const std::string& path,
const std::function<void(size_t progress, size_t total)>& progressCallback);
+ Ref<BinaryView> OpenDatabaseForConfiguration(const std::string& path);
bool SaveAutoSnapshot(BinaryView* data);
bool SaveAutoSnapshot(BinaryView* data,
const std::function<void(size_t progress, size_t total)>& progressCallback);
@@ -1698,6 +1699,7 @@ namespace BinaryNinja
std::vector<uint8_t> GetRawMetadata(const std::string& key);
uint64_t GetUIntMetadata(const std::string& key);
+ std::vector<std::string> GetLoadSettingsTypeNames();
Ref<Settings> GetLoadSettings(const std::string& typeName);
void SetLoadSettings(const std::string& typeName, Ref<Settings> settings);
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 351ad61d..96184f3a 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -2165,6 +2165,7 @@ extern "C"
BINARYNINJACOREAPI BNBinaryView* BNOpenExistingDatabase(BNFileMetadata* file, const char* path);
BINARYNINJACOREAPI BNBinaryView* BNOpenExistingDatabaseWithProgress(BNFileMetadata* file, const char* path,
void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total));
+ BINARYNINJACOREAPI BNBinaryView* BNOpenDatabaseForConfiguration(BNFileMetadata* file, const char* path);
BINARYNINJACOREAPI bool BNSaveAutoSnapshot(BNBinaryView* data);
BINARYNINJACOREAPI bool BNSaveAutoSnapshotWithProgress(BNBinaryView* data, void* ctxt,
void (*progress)(void* ctxt, size_t progress, size_t total));
@@ -4032,6 +4033,7 @@ extern "C"
BINARYNINJACOREAPI BNMetadata* BNBinaryViewQueryMetadata(BNBinaryView* view, const char* key);
BINARYNINJACOREAPI void BNBinaryViewRemoveMetadata(BNBinaryView* view, const char* key);
+ 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);
diff --git a/binaryview.cpp b/binaryview.cpp
index 0f693d2d..dc2212a6 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -2994,6 +2994,20 @@ uint64_t BinaryView::GetUIntMetadata(const string& key)
}
+vector<string> BinaryView::GetLoadSettingsTypeNames()
+{
+ size_t count = 0;
+ char** outgoingNames = BNBinaryViewGetLoadSettingsTypeNames(m_object, &count);
+ vector<string> result;
+ result.reserve(count);
+ for (size_t i = 0; i < count; i++)
+ result.push_back(outgoingNames[i]);
+
+ BNFreeStringList(outgoingNames, count);
+ return result;
+}
+
+
Ref<Settings> BinaryView::GetLoadSettings(const string& typeName)
{
BNSettings* settings = BNBinaryViewGetLoadSettings(m_object, typeName.c_str());
diff --git a/filemetadata.cpp b/filemetadata.cpp
index 4823cd94..d1d2ed2b 100644
--- a/filemetadata.cpp
+++ b/filemetadata.cpp
@@ -306,6 +306,15 @@ Ref<BinaryView> FileMetadata::OpenExistingDatabase(const string& path,
}
+Ref<BinaryView> FileMetadata::OpenDatabaseForConfiguration(const string& path)
+{
+ BNBinaryView* data = BNOpenDatabaseForConfiguration(m_object, path.c_str());
+ if (!data)
+ return nullptr;
+ return new BinaryView(data);
+}
+
+
bool FileMetadata::SaveAutoSnapshot(BinaryView* data)
{
return BNSaveAutoSnapshot(data->GetObject());
diff --git a/python/binaryview.py b/python/binaryview.py
index 2732a8d7..b55f9aae 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -4749,8 +4749,8 @@ class BinaryView(object):
def add_user_section(self, name, start, length, semantics = SectionSemantics.DefaultSectionSemantics,
type = "", align = 1, entry_size = 1, linked_section = "", info_section = "", info_data = 0):
"""
- ``add_user_section`` creates a user-defined section that can help inform analysis by clarifying what types of
- data exist in what ranges. Note that all data specified must already be mapped by an existing segment.
+ ``add_user_section`` creates a user-defined section that can help inform analysis by clarifying what types of
+ data exist in what ranges. Note that all data specified must already be mapped by an existing segment.
:param str name: name of the section
:param int start: virtual address of the start of the section
@@ -4905,6 +4905,15 @@ class BinaryView(object):
"""
core.BNBinaryViewRemoveMetadata(self.handle, key)
+ def get_load_settings_type_names(self):
+ result = []
+ count = ctypes.c_ulonglong(0)
+ names = core.BNBinaryViewGetLoadSettingsTypeNames(self.handle, count)
+ for i in range(count.value):
+ result.append(names[i])
+ core.BNFreeStringList(names, count)
+ return result
+
def get_load_settings(self, type_name):
settings_handle = core.BNBinaryViewGetLoadSettings(self.handle, type_name)
if settings_handle is None:
diff --git a/python/filemetadata.py b/python/filemetadata.py
index 8c6b2cb7..f95c1142 100644
--- a/python/filemetadata.py
+++ b/python/filemetadata.py
@@ -344,6 +344,12 @@ class FileMetadata(object):
return None
return binaryninja.binaryview.BinaryView(file_metadata = self, handle = view)
+ def open_database_for_configuration(self, filename):
+ view = core.BNOpenDatabaseForConfiguration(self.handle, str(filename))
+ if view is None:
+ return None
+ return binaryninja.binaryview.BinaryView(file_metadata = self, handle = view)
+
def save_auto_snapshot(self, progress_func = None):
if progress_func is None:
return core.BNSaveAutoSnapshot(self.raw.handle)