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 137
40+ #define BN_CURRENT_CORE_ABI_VERSION 138
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 136
47+ #define BN_MINIMUM_CORE_ABI_VERSION 138
4848
4949#ifdef __GNUC__
5050 #ifdef BINARYNINJACORE_LIBRARY
@@ -312,6 +312,8 @@ extern "C"
312312 typedef struct BNIndirectBranchInfo BNIndirectBranchInfo;
313313 typedef struct BNArchitectureAndAddress BNArchitectureAndAddress;
314314 typedef struct BNConstantRenderer BNConstantRenderer;
315+ typedef struct BNStringRecognizer BNStringRecognizer;
316+ typedef struct BNCustomStringType BNCustomStringType;
315317
316318 typedef bool (*BNProgressFunction)(void *, size_t , size_t );
317319
@@ -460,7 +462,8 @@ extern "C"
460462 StringDisplayTokenContext = 10 , // For displaying strings which aren't associated with an address
461463 ContentCollapsedContext = 11 ,
462464 ContentExpandedContext = 12 ,
463- ContentCollapsiblePadding = 13
465+ ContentCollapsiblePadding = 13 ,
466+ DerivedStringReferenceTokenContext = 14
464467 } BNInstructionTextTokenContext;
465468
466469 typedef enum BNLinearDisassemblyLineType
@@ -1631,6 +1634,15 @@ extern "C"
16311634 size_t nameCount;
16321635 } BNQualifiedName;
16331636
1637+ typedef struct BNDerivedString
1638+ {
1639+ BNStringRef* value;
1640+ bool addrValid;
1641+ uint64_t addr;
1642+ uint64_t len;
1643+ BNCustomStringType* customType;
1644+ } BNDerivedString;
1645+
16341646 typedef struct BNBinaryDataNotification
16351647 {
16361648 void * context;
@@ -1656,6 +1668,8 @@ extern "C"
16561668 void (*symbolUpdated)(void * ctxt, BNBinaryView* view, BNSymbol* sym);
16571669 void (*stringFound)(void * ctxt, BNBinaryView* view, BNStringType type, uint64_t offset, size_t len);
16581670 void (*stringRemoved)(void * ctxt, BNBinaryView* view, BNStringType type, uint64_t offset, size_t len);
1671+ void (*derivedStringFound)(void * ctxt, BNBinaryView* view, BNDerivedString* str);
1672+ void (*derivedStringRemoved)(void * ctxt, BNBinaryView* view, BNDerivedString* str);
16591673 void (*typeDefined)(void * ctxt, BNBinaryView* view, BNQualifiedName* name, BNType* type);
16601674 void (*typeUndefined)(void * ctxt, BNBinaryView* view, BNQualifiedName* name, BNType* type);
16611675 void (*typeReferenceChanged)(void * ctxt, BNBinaryView* view, BNQualifiedName* name, BNType* type);
@@ -3818,6 +3832,27 @@ extern "C"
38183832 BNOperatorPrecedence precedence);
38193833 } BNCustomConstantRenderer;
38203834
3835+ typedef struct BNCustomStringRecognizer
3836+ {
3837+ void * context;
3838+ bool (*isValidForType)(void * ctxt, BNHighLevelILFunction* hlil, BNType* type);
3839+ bool (*recognizeConstant)(
3840+ void * ctxt, BNHighLevelILFunction* hlil, size_t expr, BNType* type, int64_t val, BNDerivedString* result);
3841+ bool (*recognizeConstantPointer)(
3842+ void * ctxt, BNHighLevelILFunction* hlil, size_t expr, BNType* type, int64_t val, BNDerivedString* result);
3843+ bool (*recognizeExternPointer)(void * ctxt, BNHighLevelILFunction* hlil, size_t expr, BNType* type, int64_t val,
3844+ uint64_t offset, BNDerivedString* result);
3845+ bool (*recognizeImport)(
3846+ void * ctxt, BNHighLevelILFunction* hlil, size_t expr, BNType* type, int64_t val, BNDerivedString* result);
3847+ } BNCustomStringRecognizer;
3848+
3849+ typedef struct BNCustomStringTypeInfo
3850+ {
3851+ char * name;
3852+ char * stringPrefix;
3853+ char * stringPostfix;
3854+ } BNCustomStringTypeInfo;
3855+
38213856 BINARYNINJACOREAPI char * BNAllocString (const char * contents);
38223857 BINARYNINJACOREAPI char * BNAllocStringWithLength (const char * contents, size_t len);
38233858 BINARYNINJACOREAPI void BNFreeString (char * str);
@@ -5261,6 +5296,11 @@ extern "C"
52615296 BNBinaryView* view, uint64_t start, uint64_t len, size_t * count);
52625297 BINARYNINJACOREAPI void BNFreeStringReferenceList (BNStringReference* strings);
52635298
5299+ BINARYNINJACOREAPI BNDerivedString* BNGetDerivedStrings (BNBinaryView* view, size_t * count);
5300+ BINARYNINJACOREAPI BNReferenceSource* BNGetDerivedStringCodeReferences (
5301+ BNBinaryView* view, BNDerivedString* str, size_t * count, bool limit, size_t maxItems);
5302+ BINARYNINJACOREAPI void BNFreeDerivedStringList (BNDerivedString* strings, size_t count);
5303+
52645304 BINARYNINJACOREAPI BNVariableNameAndType* BNGetStackLayout (BNFunction* func, size_t * count);
52655305 BINARYNINJACOREAPI void BNFreeVariableNameAndTypeList (BNVariableNameAndType* vars, size_t count);
52665306 BINARYNINJACOREAPI void BNCreateAutoStackVariable (
@@ -6564,6 +6604,12 @@ extern "C"
65646604 BINARYNINJACOREAPI bool BNHighLevelILExprEqual (
65656605 BNHighLevelILFunction* leftFunc, size_t leftExpr, BNHighLevelILFunction* rightFunc, size_t rightExpr);
65666606
6607+ BINARYNINJACOREAPI void BNSetHighLevelILDerivedStringReferenceForExpr (
6608+ BNHighLevelILFunction* func, size_t expr, BNDerivedString* str);
6609+ BINARYNINJACOREAPI void BNRemoveHighLevelILDerivedStringReferenceForExpr (BNHighLevelILFunction* func, size_t expr);
6610+ BINARYNINJACOREAPI bool BNGetHighLevelILDerivedStringReferenceForExpr (
6611+ BNHighLevelILFunction* func, size_t expr, BNDerivedString* out);
6612+
65676613 // Type Libraries
65686614 BINARYNINJACOREAPI BNTypeLibrary* BNNewTypeLibrary (BNArchitecture* arch, const char * name);
65696615 BINARYNINJACOREAPI BNTypeLibrary* BNNewTypeLibraryReference (BNTypeLibrary* lib);
@@ -8686,13 +8732,15 @@ extern "C"
86868732 BINARYNINJACOREAPI BNStringRef* BNDuplicateStringRef (BNStringRef* ref);
86878733 BINARYNINJACOREAPI const char * BNGetStringRefContents (BNStringRef* ref);
86888734 BINARYNINJACOREAPI size_t BNGetStringRefSize (BNStringRef* ref);
8735+ BINARYNINJACOREAPI BNStringRef* BNCreateStringRef (const char * str);
8736+ BINARYNINJACOREAPI BNStringRef* BNCreateStringRefOfLength (const char * str, size_t len);
86898737
86908738 // Constant Renderers
86918739 BINARYNINJACOREAPI BNConstantRenderer* BNRegisterConstantRenderer (
86928740 const char * name, BNCustomConstantRenderer* renderer);
86938741 BINARYNINJACOREAPI BNConstantRenderer* BNGetConstantRendererByName (const char * name);
86948742 BINARYNINJACOREAPI BNConstantRenderer** BNGetConstantRendererList (size_t * count);
8695- BINARYNINJACOREAPI void BNFreeConstantRendererList (BNLanguageRepresentationFunctionType ** renderers);
8743+ BINARYNINJACOREAPI void BNFreeConstantRendererList (BNConstantRenderer ** renderers);
86968744 BINARYNINJACOREAPI char * BNGetConstantRendererName (BNConstantRenderer* renderer);
86978745 BINARYNINJACOREAPI bool BNIsConstantRendererValidForType (
86988746 BNConstantRenderer* renderer, BNHighLevelILFunction* il, BNType* type);
@@ -8703,6 +8751,32 @@ extern "C"
87038751 BNHighLevelILFunction* il, size_t exprIndex, BNType* type, int64_t val, BNHighLevelILTokenEmitter* tokens,
87048752 BNDisassemblySettings* settings, BNSymbolDisplayType symbolDisplay, BNOperatorPrecedence precedence);
87058753
8754+ // String recognizers
8755+ BINARYNINJACOREAPI BNCustomStringType* BNRegisterCustomStringType (BNCustomStringTypeInfo* info);
8756+ BINARYNINJACOREAPI BNCustomStringType* BNGetCustomStringTypeByName (const char * name);
8757+ BINARYNINJACOREAPI BNCustomStringType* BNGetCustomStringTypeByID (uint32_t id);
8758+ BINARYNINJACOREAPI BNCustomStringType** BNGetCustomStringTypeList (size_t * count);
8759+ BINARYNINJACOREAPI void BNFreeCustomStringTypeList (BNCustomStringType** types);
8760+ BINARYNINJACOREAPI char * BNGetCustomStringTypeName (BNCustomStringType* type);
8761+ BINARYNINJACOREAPI char * BNGetCustomStringTypePrefix (BNCustomStringType* type);
8762+ BINARYNINJACOREAPI char * BNGetCustomStringTypePostfix (BNCustomStringType* type);
8763+ BINARYNINJACOREAPI BNStringRecognizer* BNRegisterStringRecognizer (
8764+ const char * name, BNCustomStringRecognizer* recognizer);
8765+ BINARYNINJACOREAPI BNStringRecognizer* BNGetStringRecognizerByName (const char * name);
8766+ BINARYNINJACOREAPI BNStringRecognizer** BNGetStringRecognizerList (size_t * count);
8767+ BINARYNINJACOREAPI void BNFreeStringRecognizerList (BNStringRecognizer** recognizers);
8768+ BINARYNINJACOREAPI char * BNGetStringRecognizerName (BNStringRecognizer* recognizer);
8769+ BINARYNINJACOREAPI bool BNIsStringRecognizerValidForType (
8770+ BNStringRecognizer* recognizer, BNHighLevelILFunction* il, BNType* type);
8771+ BINARYNINJACOREAPI bool BNStringRecognizerRecognizeConstant (BNStringRecognizer* recognizer,
8772+ BNHighLevelILFunction* il, size_t exprIndex, BNType* type, int64_t val, BNDerivedString* out);
8773+ BINARYNINJACOREAPI bool BNStringRecognizerRecognizeConstantPointer (BNStringRecognizer* recognizer,
8774+ BNHighLevelILFunction* il, size_t exprIndex, BNType* type, int64_t val, BNDerivedString* out);
8775+ BINARYNINJACOREAPI bool BNStringRecognizerRecognizeExternPointer (BNStringRecognizer* recognizer,
8776+ BNHighLevelILFunction* il, size_t exprIndex, BNType* type, int64_t val, uint64_t offset, BNDerivedString* out);
8777+ BINARYNINJACOREAPI bool BNStringRecognizerRecognizeImport (BNStringRecognizer* recognizer, BNHighLevelILFunction* il,
8778+ size_t exprIndex, BNType* type, int64_t val, BNDerivedString* out);
8779+
87068780#ifdef __cplusplus
87078781}
87088782#endif
0 commit comments