summaryrefslogtreecommitdiff
path: root/binaryninjacore.h
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2025-09-30 15:09:48 -0400
committerBrian Potchik <brian@vector35.com>2025-09-30 15:09:48 -0400
commit796932b62e7d007a46d8ad31cdb618e8125073ab (patch)
tree35937ae27a646cc6a1d7e79cafd4b46b0991a0b1 /binaryninjacore.h
parent36a06931b3eac492eb1e609949e2cc5a3a03bf57 (diff)
Initial support for opening container formats.
Diffstat (limited to 'binaryninjacore.h')
-rw-r--r--binaryninjacore.h81
1 files changed, 73 insertions, 8 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 3c2386cd..6299618d 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -37,14 +37,14 @@
// Current ABI version for linking to the core. This is incremented any time
// there are changes to the API that affect linking, including new functions,
// new types, or modifications to existing functions or types.
-#define BN_CURRENT_CORE_ABI_VERSION 132
+#define BN_CURRENT_CORE_ABI_VERSION 133
// Minimum ABI version that is supported for loading of plugins. Plugins that
// are linked to an ABI version less than this will not be able to load and
// will require rebuilding. The minimum version is increased when there are
// incompatible changes that break binary compatibility, such as changes to
// existing types or functions.
-#define BN_MINIMUM_CORE_ABI_VERSION 131
+#define BN_MINIMUM_CORE_ABI_VERSION 133
#ifdef __GNUC__
#ifdef BINARYNINJACORE_LIBRARY
@@ -205,6 +205,8 @@ extern "C"
typedef struct BNDatabase BNDatabase;
typedef struct BNFileMetadata BNFileMetadata;
typedef struct BNTransform BNTransform;
+ typedef struct BNTransformContext BNTransformContext;
+ typedef struct BNTransformSession BNTransformSession;
typedef struct BNArchitecture BNArchitecture;
typedef struct BNFunction BNFunction;
typedef struct BNBasicBlock BNBasicBlock;
@@ -348,6 +350,19 @@ extern "C"
HashTransform = 8 // Hash function
} BNTransformType;
+ typedef enum BNTransformCapabilities
+ {
+ TransformNoCapabilities = 0,
+ TransformSupportsDetection = 1
+ } BNTransformCapabilities;
+
+ typedef enum BNTransformSessionMode
+ {
+ TransformSessionModeDisabled = 0, // Open the root file as-is (no unwrapping)
+ TransformSessionModeFull = 1, // Discover all paths (build the full context tree)
+ TransformSessionModeOnDemand = 2, // Proceed step-by-step, requesting input at each stage
+ } BNTransformSessionMode;
+
typedef enum BNBranchType
{
UnconditionalBranch = 0,
@@ -1753,10 +1768,9 @@ extern "C"
void* context;
BNTransformParameterInfo* (*getParameters)(void* ctxt, size_t* count);
void (*freeParameters)(BNTransformParameterInfo* params, size_t count);
- bool (*decode)(
- void* ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
- bool (*encode)(
- void* ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
+ bool (*decode)(void* ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
+ bool (*encode)(void* ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
+ bool (*canDecode)(void* ctxt, BNBinaryView* input);
} BNCustomTransform;
typedef struct BNInstructionInfo
@@ -3802,6 +3816,7 @@ extern "C"
BINARYNINJACOREAPI void BNSetLicense(const char* licenseData);
BINARYNINJACOREAPI bool BNIsDatabase(const char* filename);
+ BINARYNINJACOREAPI bool BNIsDatabaseFromData(const void* data, size_t len);
BINARYNINJACOREAPI bool BNAuthenticateEnterpriseServerWithCredentials(
const char* username, const char* password, bool remember);
@@ -4233,6 +4248,9 @@ extern "C"
BINARYNINJACOREAPI char* BNGetFilename(BNFileMetadata* file);
BINARYNINJACOREAPI void BNSetFilename(BNFileMetadata* file, const char* name);
+ BINARYNINJACOREAPI char* BNGetVirtualPath(BNFileMetadata* file);
+ BINARYNINJACOREAPI void BNSetVirtualPath(BNFileMetadata* file, const char* path);
+
BINARYNINJACOREAPI BNProjectFile* BNGetProjectFile(BNFileMetadata* file);
BINARYNINJACOREAPI void BNSetProjectFile(BNFileMetadata* file, BNProjectFile* pfile);
@@ -4610,10 +4628,12 @@ extern "C"
BINARYNINJACOREAPI BNTransform* BNGetTransformByName(const char* name);
BINARYNINJACOREAPI BNTransform** BNGetTransformTypeList(size_t* count);
BINARYNINJACOREAPI void BNFreeTransformTypeList(BNTransform** xforms);
- BINARYNINJACOREAPI BNTransform* BNRegisterTransformType(
- BNTransformType type, const char* name, const char* longName, const char* group, BNCustomTransform* xform);
+ BINARYNINJACOREAPI BNTransform* BNRegisterTransformType(BNTransformType type, const char* name, const char* longName, const char* group, BNCustomTransform* xform);
+ BINARYNINJACOREAPI BNTransform* BNRegisterTransformTypeWithCapabilities(BNTransformType type, uint32_t capabilities, const char* name, const char* longName, const char* group, BNCustomTransform* xform);
BINARYNINJACOREAPI BNTransformType BNGetTransformType(BNTransform* xform);
+ BINARYNINJACOREAPI uint32_t BNGetTransformCapabilities(BNTransform* xform);
+ BINARYNINJACOREAPI bool BNTransformSupportsDetection(BNTransform* xform);
BINARYNINJACOREAPI char* BNGetTransformName(BNTransform* xform);
BINARYNINJACOREAPI char* BNGetTransformLongName(BNTransform* xform);
BINARYNINJACOREAPI char* BNGetTransformGroup(BNTransform* xform);
@@ -4623,6 +4643,51 @@ extern "C"
BNTransform* xform, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
BINARYNINJACOREAPI bool BNEncode(
BNTransform* xform, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
+ BINARYNINJACOREAPI bool BNCanDecode(BNTransform* xform, BNBinaryView* input);
+
+ // Transform Context
+ BINARYNINJACOREAPI BNTransformContext* BNNewTransformContextReference(BNTransformContext* context);
+ BINARYNINJACOREAPI void BNFreeTransformContext(BNTransformContext* context);
+ BINARYNINJACOREAPI char* BNTransformContextGetTransformName(BNTransformContext* context);
+ BINARYNINJACOREAPI char* BNTransformContextGetFileName(BNTransformContext* context);
+ BINARYNINJACOREAPI BNBinaryView* BNTransformContextGetInput(BNTransformContext* context);
+ BINARYNINJACOREAPI BNMetadata* BNTransformContextGetMetadata(BNTransformContext* context);
+ BINARYNINJACOREAPI BNTransformContext* BNTransformContextGetParent(BNTransformContext* context);
+ BINARYNINJACOREAPI size_t BNTransformContextGetChildCount(BNTransformContext* context);
+ BINARYNINJACOREAPI BNTransformContext** BNTransformContextGetChildren(BNTransformContext* context, size_t* count);
+ BINARYNINJACOREAPI void BNFreeTransformContextList(BNTransformContext** contexts, size_t count);
+ BINARYNINJACOREAPI BNTransformContext* BNTransformContextGetChild(BNTransformContext* context, const char* filename);
+ BINARYNINJACOREAPI BNTransformContext* BNTransformContextCreateChild(BNTransformContext* context, BNDataBuffer* data, const char* filename);
+ BINARYNINJACOREAPI bool BNTransformContextIsLeaf(BNTransformContext* context);
+ BINARYNINJACOREAPI bool BNTransformContextIsRoot(BNTransformContext* context);
+ BINARYNINJACOREAPI char** BNTransformContextGetAvailableFiles(BNTransformContext* context, size_t* count);
+ BINARYNINJACOREAPI void BNTransformContextSetAvailableFiles(BNTransformContext* context, const char** files, size_t count);
+ BINARYNINJACOREAPI bool BNTransformContextHasAvailableFiles(BNTransformContext* context);
+ BINARYNINJACOREAPI char** BNTransformContextGetRequestedFiles(BNTransformContext* context, size_t* count);
+ BINARYNINJACOREAPI void BNTransformContextSetRequestedFiles(BNTransformContext* context, const char** files, size_t count);
+ BINARYNINJACOREAPI bool BNTransformContextHasRequestedFiles(BNTransformContext* context);
+ BINARYNINJACOREAPI bool BNTransformContextIsDatabase(BNTransformContext* context);
+
+ // Transform Session
+ BINARYNINJACOREAPI BNTransformSession* BNCreateTransformSession(const char* filename);
+ BINARYNINJACOREAPI BNTransformSession* BNCreateTransformSessionWithMode(const char* filename, BNTransformSessionMode mode);
+ BINARYNINJACOREAPI BNTransformSession* BNCreateTransformSessionFromBinaryView(BNBinaryView* initialView);
+ BINARYNINJACOREAPI BNTransformSession* BNCreateTransformSessionFromBinaryViewWithMode(BNBinaryView* initialView, BNTransformSessionMode mode);
+ BINARYNINJACOREAPI BNTransformSession* BNNewTransformSessionReference(BNTransformSession* session);
+ BINARYNINJACOREAPI void BNFreeTransformSession(BNTransformSession* session);
+ BINARYNINJACOREAPI BNBinaryView* BNTransformSessionGetCurrentView(BNTransformSession* session);
+ BINARYNINJACOREAPI BNTransformContext* BNTransformSessionGetRootContext(BNTransformSession* session);
+ BINARYNINJACOREAPI BNTransformContext* BNTransformSessionGetCurrentContext(BNTransformSession* session);
+ BINARYNINJACOREAPI bool BNTransformSessionProcess(BNTransformSession* session);
+ BINARYNINJACOREAPI bool BNTransformSessionHasAnyStages(BNTransformSession* session);
+ BINARYNINJACOREAPI bool BNTransformSessionHasSinglePath(BNTransformSession* session);
+ BINARYNINJACOREAPI BNTransformContext** BNTransformSessionGetSelectedContexts(BNTransformSession* session, size_t* count);
+ BINARYNINJACOREAPI void BNTransformSessionSetSelectedContexts(BNTransformSession* session, BNTransformContext** contexts, size_t count);
+ BINARYNINJACOREAPI bool BNTransformSessionRequiresUserInput(BNTransformSession* session);
+ BINARYNINJACOREAPI bool BNTransformSessionHasMultipleFileChoices(BNTransformSession* session);
+ BINARYNINJACOREAPI char** BNTransformSessionGetAvailableFileChoices(BNTransformSession* session, size_t* count);
+ BINARYNINJACOREAPI bool BNTransformSessionSelectFiles(BNTransformSession* session, const char** files, size_t count);
+ BINARYNINJACOREAPI bool BNTransformSessionProcessWithUserInput(BNTransformSession* session);
// Architectures
BINARYNINJACOREAPI BNArchitecture* BNGetArchitectureByName(const char* name);