diff options
| author | Brian Potchik <brian@vector35.com> | 2019-09-11 11:38:45 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2019-09-11 11:38:45 -0400 |
| commit | 5d01e8e553280f1f9e7676ea32af183f6e23efd7 (patch) | |
| tree | 3b271faab8b8cc76600c84caf7553877fcd7958e | |
| parent | 162ad8604bdbcb1fb36c899e92f5606cd6f231eb (diff) | |
Add ability to open a database with options.
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | binaryninjacore.h | 2 | ||||
| -rw-r--r-- | binaryview.cpp | 14 | ||||
| -rw-r--r-- | filemetadata.cpp | 9 | ||||
| -rw-r--r-- | python/binaryview.py | 13 | ||||
| -rw-r--r-- | python/filemetadata.py | 6 |
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) |
