From ce08fff22e4bed3d977cfd662ed2a6d8caa82997 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Mon, 14 Sep 2020 17:15:37 -0400 Subject: Database api Co-Authored-By: Josh Ferrell --- binaryninjacore.h | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'binaryninjacore.h') diff --git a/binaryninjacore.h b/binaryninjacore.h index 8af593c5..35b26d2a 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -156,6 +156,9 @@ extern "C" struct BNBinaryViewType; struct BNBinaryReader; struct BNBinaryWriter; + struct BNKeyValueStore; + struct BNSnapshot; + struct BNDatabase; struct BNFileMetadata; struct BNTransform; struct BNArchitecture; @@ -2767,6 +2770,69 @@ __attribute__ ((format (printf, 1, 2))) BINARYNINJACOREAPI bool BNSaveAutoSnapshot(BNBinaryView* data, BNSaveSettings* settings); BINARYNINJACOREAPI bool BNSaveAutoSnapshotWithProgress(BNBinaryView* data, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total), BNSaveSettings* settings); + BINARYNINJACOREAPI void BNGetSnapshotData(BNFileMetadata* file, BNKeyValueStore* data, BNKeyValueStore* cache, void* ctxt, void (*progress)(void* ctxt, size_t current, size_t total)); + BINARYNINJACOREAPI void BNApplySnapshotData(BNFileMetadata* file, BNBinaryView* view, BNKeyValueStore* data, BNKeyValueStore* cache, void* ctxt, void (*progress)(void* ctxt, size_t current, size_t total), bool openForConfiguration, bool restoreRawView); + BINARYNINJACOREAPI BNDatabase* BNGetFileMetadataDatabase(BNFileMetadata* file); + + // Key value store + BINARYNINJACOREAPI BNKeyValueStore* BNCreateKeyValueStore(void); + BINARYNINJACOREAPI BNKeyValueStore* BNCreateKeyValueStoreFromDataBuffer(BNDataBuffer* buffer); + BINARYNINJACOREAPI BNKeyValueStore* BNNewKeyValueStoreReference(BNKeyValueStore* store); + BINARYNINJACOREAPI void BNFreeKeyValueStore(BNKeyValueStore* store); + + BINARYNINJACOREAPI char** BNGetKeyValueStoreKeys(BNKeyValueStore* store, size_t* count); + BINARYNINJACOREAPI bool BNKeyValueStoreHasValue(BNKeyValueStore* store, const char* name); + BINARYNINJACOREAPI char* BNGetKeyValueStoreValue(BNKeyValueStore* store, const char* name); + BINARYNINJACOREAPI BNDataBuffer* BNGetKeyValueStoreBuffer(BNKeyValueStore* store, const char* name); + BINARYNINJACOREAPI bool BNSetKeyValueStoreValue(BNKeyValueStore* store, const char* name, const char* value); + BINARYNINJACOREAPI bool BNSetKeyValueStoreBuffer(BNKeyValueStore* store, const char* name, const BNDataBuffer* value); + BINARYNINJACOREAPI BNDataBuffer* BNGetKeyValueStoreSerializedData(BNKeyValueStore* store); + BINARYNINJACOREAPI void BNBeginKeyValueStoreNamespace(BNKeyValueStore* store, const char* name); + BINARYNINJACOREAPI void BNEndKeyValueStoreNamespace(BNKeyValueStore* store); + BINARYNINJACOREAPI bool BNIsKeyValueStoreEmpty(BNKeyValueStore* store); + BINARYNINJACOREAPI size_t BNGetKeyValueStoreValueSize(BNKeyValueStore* store); + BINARYNINJACOREAPI size_t BNGetKeyValueStoreDataSize(BNKeyValueStore* store); + BINARYNINJACOREAPI size_t BNGetKeyValueStoreValueStorageSize(BNKeyValueStore* store); + BINARYNINJACOREAPI size_t BNGetKeyValueStoreNamespaceSize(BNKeyValueStore* store); + + // Database object + BINARYNINJACOREAPI BNDatabase* BNNewDatabaseReference(BNDatabase* database); + BINARYNINJACOREAPI void BNFreeDatabase(BNDatabase* database); + BINARYNINJACOREAPI void BNSetDatabaseCurrentSnapshot(BNDatabase* database, int64_t id); + BINARYNINJACOREAPI BNSnapshot* BNGetDatabaseCurrentSnapshot(BNDatabase* database); + BINARYNINJACOREAPI BNSnapshot** BNGetDatabaseSnapshots(BNDatabase* database, size_t* count); + BINARYNINJACOREAPI BNSnapshot* BNGetDatabaseSnapshot(BNDatabase* database, int64_t id); + BINARYNINJACOREAPI int64_t BNWriteDatabaseSnapshotData(BNDatabase* database, int64_t* parents, size_t parentCount, BNBinaryView* file, const char* name, BNKeyValueStore* data, bool autoSave, void* ctxt, void(*progress)(void*, size_t, size_t)); + BINARYNINJACOREAPI bool BNRemoveDatabaseSnapshot(BNDatabase* database, int64_t id); + BINARYNINJACOREAPI char** BNGetDatabaseGlobalKeys(BNDatabase* database, size_t* count); + BINARYNINJACOREAPI int BNDatabaseHasGlobal(BNDatabase* database, const char* key); + BINARYNINJACOREAPI char* BNReadDatabaseGlobal(BNDatabase* database, const char* key); + BINARYNINJACOREAPI bool BNWriteDatabaseGlobal(BNDatabase* database, const char* key, const char* val); + BINARYNINJACOREAPI BNDataBuffer* BNReadDatabaseGlobalData(BNDatabase* database, const char* key); + BINARYNINJACOREAPI bool BNWriteDatabaseGlobalData(BNDatabase* database, const char* key, BNDataBuffer* val); + BINARYNINJACOREAPI BNFileMetadata* BNGetDatabaseFile(BNDatabase* database); + BINARYNINJACOREAPI BNKeyValueStore* BNReadDatabaseAnalysisCache(BNDatabase* database); + BINARYNINJACOREAPI bool BNWriteDatabaseAnalysisCache(BNDatabase* database, BNKeyValueStore* val); + + // Database snapshots + BINARYNINJACOREAPI BNSnapshot* BNNewSnapshotReference(BNSnapshot* snapshot); + BINARYNINJACOREAPI void BNFreeSnapshot(BNSnapshot* snapshot); + BINARYNINJACOREAPI void BNFreeSnapshotList(BNSnapshot** snapshots, size_t count); + BINARYNINJACOREAPI BNDatabase* BNGetSnapshotDatabase(BNSnapshot* snapshot); + BINARYNINJACOREAPI int64_t BNGetSnapshotId(BNSnapshot* snapshot); + BINARYNINJACOREAPI BNSnapshot* BNGetSnapshotFirstParent(BNSnapshot* snapshot); + BINARYNINJACOREAPI BNSnapshot** BNGetSnapshotParents(BNSnapshot* snapshot, size_t* count); + BINARYNINJACOREAPI BNSnapshot** BNGetSnapshotChildren(BNSnapshot* snapshot, size_t* count); + BINARYNINJACOREAPI char* BNGetSnapshotName(BNSnapshot* snapshot); + BINARYNINJACOREAPI bool BNIsSnapshotAutoSave(BNSnapshot* snapshot); + BINARYNINJACOREAPI BNDataBuffer* BNGetSnapshotFileContents(BNSnapshot* snapshot); + BINARYNINJACOREAPI BNDataBuffer* BNGetSnapshotFileContentsHash(BNSnapshot* snapshot); + BINARYNINJACOREAPI BNKeyValueStore* BNReadSnapshotData(BNSnapshot* snapshot); + BINARYNINJACOREAPI BNKeyValueStore* BNReadSnapshotDataWithProgress(BNSnapshot* snapshot, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total)); + BINARYNINJACOREAPI BNUndoEntry* BNGetSnapshotUndoEntries(BNSnapshot* snapshot, size_t* count); + BINARYNINJACOREAPI BNUndoEntry* BNGetSnapshotUndoEntriesWithProgress(BNSnapshot* snapshot, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total), size_t* count); + BINARYNINJACOREAPI bool BNSnapshotHasAncestor(BNSnapshot* snapshot, BNSnapshot* other); + BINARYNINJACOREAPI bool BNRebase(BNBinaryView* data, uint64_t address); BINARYNINJACOREAPI bool BNRebaseWithProgress(BNBinaryView* data, uint64_t address, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total)); @@ -2788,6 +2854,7 @@ __attribute__ ((format (printf, 1, 2))) BINARYNINJACOREAPI BNUndoEntry* BNGetUndoEntries(BNFileMetadata* file, size_t* count); BINARYNINJACOREAPI void BNFreeUndoEntries(BNUndoEntry* entries, size_t count); + BINARYNINJACOREAPI void BNClearUndoEntries(BNFileMetadata* file); BINARYNINJACOREAPI BNUser* BNNewUserReference(BNUser* user); BINARYNINJACOREAPI void BNFreeUser(BNUser* user); -- cgit v1.3.1