3737// Current ABI version for linking to the core. This is incremented any time
3838// there are changes to the API that affect linking, including new functions,
3939// new types, or modifications to existing functions or types.
40- #define BN_CURRENT_CORE_ABI_VERSION 132
40+ #define BN_CURRENT_CORE_ABI_VERSION 133
4141
4242// Minimum ABI version that is supported for loading of plugins. Plugins that
4343// are linked to an ABI version less than this will not be able to load and
4444// will require rebuilding. The minimum version is increased when there are
4545// incompatible changes that break binary compatibility, such as changes to
4646// existing types or functions.
47- #define BN_MINIMUM_CORE_ABI_VERSION 131
47+ #define BN_MINIMUM_CORE_ABI_VERSION 133
4848
4949#ifdef __GNUC__
5050 #ifdef BINARYNINJACORE_LIBRARY
@@ -205,6 +205,8 @@ extern "C"
205205 typedef struct BNDatabase BNDatabase;
206206 typedef struct BNFileMetadata BNFileMetadata;
207207 typedef struct BNTransform BNTransform;
208+ typedef struct BNTransformContext BNTransformContext;
209+ typedef struct BNTransformSession BNTransformSession;
208210 typedef struct BNArchitecture BNArchitecture;
209211 typedef struct BNFunction BNFunction;
210212 typedef struct BNBasicBlock BNBasicBlock;
@@ -348,6 +350,19 @@ extern "C"
348350 HashTransform = 8 // Hash function
349351 } BNTransformType;
350352
353+ typedef enum BNTransformCapabilities
354+ {
355+ TransformNoCapabilities = 0 ,
356+ TransformSupportsDetection = 1
357+ } BNTransformCapabilities;
358+
359+ typedef enum BNTransformSessionMode
360+ {
361+ TransformSessionModeDisabled = 0 , // Open the root file as-is (no unwrapping)
362+ TransformSessionModeFull = 1 , // Discover all paths (build the full context tree)
363+ TransformSessionModeOnDemand = 2 , // Proceed step-by-step, requesting input at each stage
364+ } BNTransformSessionMode;
365+
351366 typedef enum BNBranchType
352367 {
353368 UnconditionalBranch = 0 ,
@@ -1753,10 +1768,9 @@ extern "C"
17531768 void * context;
17541769 BNTransformParameterInfo* (*getParameters)(void * ctxt, size_t * count);
17551770 void (*freeParameters)(BNTransformParameterInfo* params, size_t count);
1756- bool (*decode)(
1757- void * ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
1758- bool (*encode)(
1759- void * ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
1771+ bool (*decode)(void * ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
1772+ bool (*encode)(void * ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
1773+ bool (*canDecode)(void * ctxt, BNBinaryView* input);
17601774 } BNCustomTransform;
17611775
17621776 typedef struct BNInstructionInfo
@@ -3802,6 +3816,7 @@ extern "C"
38023816 BINARYNINJACOREAPI void BNSetLicense (const char * licenseData);
38033817
38043818 BINARYNINJACOREAPI bool BNIsDatabase (const char * filename);
3819+ BINARYNINJACOREAPI bool BNIsDatabaseFromData (const void * data, size_t len);
38053820
38063821 BINARYNINJACOREAPI bool BNAuthenticateEnterpriseServerWithCredentials (
38073822 const char * username, const char * password, bool remember);
@@ -4233,6 +4248,9 @@ extern "C"
42334248 BINARYNINJACOREAPI char * BNGetFilename (BNFileMetadata* file);
42344249 BINARYNINJACOREAPI void BNSetFilename (BNFileMetadata* file, const char * name);
42354250
4251+ BINARYNINJACOREAPI char * BNGetVirtualPath (BNFileMetadata* file);
4252+ BINARYNINJACOREAPI void BNSetVirtualPath (BNFileMetadata* file, const char * path);
4253+
42364254 BINARYNINJACOREAPI BNProjectFile* BNGetProjectFile (BNFileMetadata* file);
42374255 BINARYNINJACOREAPI void BNSetProjectFile (BNFileMetadata* file, BNProjectFile* pfile);
42384256
@@ -4610,10 +4628,12 @@ extern "C"
46104628 BINARYNINJACOREAPI BNTransform* BNGetTransformByName (const char * name);
46114629 BINARYNINJACOREAPI BNTransform** BNGetTransformTypeList (size_t * count);
46124630 BINARYNINJACOREAPI void BNFreeTransformTypeList (BNTransform** xforms);
4613- BINARYNINJACOREAPI BNTransform* BNRegisterTransformType (
4614- BNTransformType type, const char * name, const char * longName, const char * group, BNCustomTransform* xform);
4631+ BINARYNINJACOREAPI BNTransform* BNRegisterTransformType (BNTransformType type, const char * name, const char * longName, const char * group, BNCustomTransform* xform);
4632+ BINARYNINJACOREAPI BNTransform* BNRegisterTransformTypeWithCapabilities ( BNTransformType type, uint32_t capabilities , const char * name, const char * longName, const char * group, BNCustomTransform* xform);
46154633
46164634 BINARYNINJACOREAPI BNTransformType BNGetTransformType (BNTransform* xform);
4635+ BINARYNINJACOREAPI uint32_t BNGetTransformCapabilities (BNTransform* xform);
4636+ BINARYNINJACOREAPI bool BNTransformSupportsDetection (BNTransform* xform);
46174637 BINARYNINJACOREAPI char * BNGetTransformName (BNTransform* xform);
46184638 BINARYNINJACOREAPI char * BNGetTransformLongName (BNTransform* xform);
46194639 BINARYNINJACOREAPI char * BNGetTransformGroup (BNTransform* xform);
@@ -4623,6 +4643,51 @@ extern "C"
46234643 BNTransform* xform, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
46244644 BINARYNINJACOREAPI bool BNEncode (
46254645 BNTransform* xform, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount);
4646+ BINARYNINJACOREAPI bool BNCanDecode (BNTransform* xform, BNBinaryView* input);
4647+
4648+ // Transform Context
4649+ BINARYNINJACOREAPI BNTransformContext* BNNewTransformContextReference (BNTransformContext* context);
4650+ BINARYNINJACOREAPI void BNFreeTransformContext (BNTransformContext* context);
4651+ BINARYNINJACOREAPI char * BNTransformContextGetTransformName (BNTransformContext* context);
4652+ BINARYNINJACOREAPI char * BNTransformContextGetFileName (BNTransformContext* context);
4653+ BINARYNINJACOREAPI BNBinaryView* BNTransformContextGetInput (BNTransformContext* context);
4654+ BINARYNINJACOREAPI BNMetadata* BNTransformContextGetMetadata (BNTransformContext* context);
4655+ BINARYNINJACOREAPI BNTransformContext* BNTransformContextGetParent (BNTransformContext* context);
4656+ BINARYNINJACOREAPI size_t BNTransformContextGetChildCount (BNTransformContext* context);
4657+ BINARYNINJACOREAPI BNTransformContext** BNTransformContextGetChildren (BNTransformContext* context, size_t * count);
4658+ BINARYNINJACOREAPI void BNFreeTransformContextList (BNTransformContext** contexts, size_t count);
4659+ BINARYNINJACOREAPI BNTransformContext* BNTransformContextGetChild (BNTransformContext* context, const char * filename);
4660+ BINARYNINJACOREAPI BNTransformContext* BNTransformContextCreateChild (BNTransformContext* context, BNDataBuffer* data, const char * filename);
4661+ BINARYNINJACOREAPI bool BNTransformContextIsLeaf (BNTransformContext* context);
4662+ BINARYNINJACOREAPI bool BNTransformContextIsRoot (BNTransformContext* context);
4663+ BINARYNINJACOREAPI char ** BNTransformContextGetAvailableFiles (BNTransformContext* context, size_t * count);
4664+ BINARYNINJACOREAPI void BNTransformContextSetAvailableFiles (BNTransformContext* context, const char ** files, size_t count);
4665+ BINARYNINJACOREAPI bool BNTransformContextHasAvailableFiles (BNTransformContext* context);
4666+ BINARYNINJACOREAPI char ** BNTransformContextGetRequestedFiles (BNTransformContext* context, size_t * count);
4667+ BINARYNINJACOREAPI void BNTransformContextSetRequestedFiles (BNTransformContext* context, const char ** files, size_t count);
4668+ BINARYNINJACOREAPI bool BNTransformContextHasRequestedFiles (BNTransformContext* context);
4669+ BINARYNINJACOREAPI bool BNTransformContextIsDatabase (BNTransformContext* context);
4670+
4671+ // Transform Session
4672+ BINARYNINJACOREAPI BNTransformSession* BNCreateTransformSession (const char * filename);
4673+ BINARYNINJACOREAPI BNTransformSession* BNCreateTransformSessionWithMode (const char * filename, BNTransformSessionMode mode);
4674+ BINARYNINJACOREAPI BNTransformSession* BNCreateTransformSessionFromBinaryView (BNBinaryView* initialView);
4675+ BINARYNINJACOREAPI BNTransformSession* BNCreateTransformSessionFromBinaryViewWithMode (BNBinaryView* initialView, BNTransformSessionMode mode);
4676+ BINARYNINJACOREAPI BNTransformSession* BNNewTransformSessionReference (BNTransformSession* session);
4677+ BINARYNINJACOREAPI void BNFreeTransformSession (BNTransformSession* session);
4678+ BINARYNINJACOREAPI BNBinaryView* BNTransformSessionGetCurrentView (BNTransformSession* session);
4679+ BINARYNINJACOREAPI BNTransformContext* BNTransformSessionGetRootContext (BNTransformSession* session);
4680+ BINARYNINJACOREAPI BNTransformContext* BNTransformSessionGetCurrentContext (BNTransformSession* session);
4681+ BINARYNINJACOREAPI bool BNTransformSessionProcess (BNTransformSession* session);
4682+ BINARYNINJACOREAPI bool BNTransformSessionHasAnyStages (BNTransformSession* session);
4683+ BINARYNINJACOREAPI bool BNTransformSessionHasSinglePath (BNTransformSession* session);
4684+ BINARYNINJACOREAPI BNTransformContext** BNTransformSessionGetSelectedContexts (BNTransformSession* session, size_t * count);
4685+ BINARYNINJACOREAPI void BNTransformSessionSetSelectedContexts (BNTransformSession* session, BNTransformContext** contexts, size_t count);
4686+ BINARYNINJACOREAPI bool BNTransformSessionRequiresUserInput (BNTransformSession* session);
4687+ BINARYNINJACOREAPI bool BNTransformSessionHasMultipleFileChoices (BNTransformSession* session);
4688+ BINARYNINJACOREAPI char ** BNTransformSessionGetAvailableFileChoices (BNTransformSession* session, size_t * count);
4689+ BINARYNINJACOREAPI bool BNTransformSessionSelectFiles (BNTransformSession* session, const char ** files, size_t count);
4690+ BINARYNINJACOREAPI bool BNTransformSessionProcessWithUserInput (BNTransformSession* session);
46264691
46274692 // Architectures
46284693 BINARYNINJACOREAPI BNArchitecture* BNGetArchitectureByName (const char * name);
0 commit comments