diff options
| author | Brian Potchik <brian@vector35.com> | 2025-09-30 15:09:48 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-09-30 15:09:48 -0400 |
| commit | 796932b62e7d007a46d8ad31cdb618e8125073ab (patch) | |
| tree | 35937ae27a646cc6a1d7e79cafd4b46b0991a0b1 /binaryninjacore.h | |
| parent | 36a06931b3eac492eb1e609949e2cc5a3a03bf57 (diff) | |
Initial support for opening container formats.
Diffstat (limited to 'binaryninjacore.h')
| -rw-r--r-- | binaryninjacore.h | 81 |
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); |
