@@ -137,6 +137,7 @@ extern "C"
137137 struct BNRepository ;
138138 struct BNRepoPlugin ;
139139 struct BNRepositoryManager ;
140+ struct BNMetadata ;
140141
141142 typedef bool (* BNLoadPluginCallback )(const char * repoPath , const char * pluginPath , void * ctx );
142143
@@ -1257,6 +1258,7 @@ extern "C"
12571258 SuccessfulScriptExecution
12581259 };
12591260
1261+
12601262 struct BNScriptingInstanceCallbacks
12611263 {
12621264 void * context ;
@@ -1474,6 +1476,21 @@ extern "C"
14741476 double seconds ;
14751477 };
14761478
1479+ enum BNMetadataType
1480+ {
1481+ BooleanDataType ,
1482+ StringDataType ,
1483+ UnsignedIntegerDataType ,
1484+ SignedIntegerDataType ,
1485+ DoubleDataType ,
1486+ BooleanListDataType ,
1487+ StringListDataType ,
1488+ UnsignedIntegerListDataType ,
1489+ SignedIntegerListDataType ,
1490+ DoubleListDataType ,
1491+ RawDataType
1492+ };
1493+
14771494 BINARYNINJACOREAPI char * BNAllocString (const char * contents );
14781495 BINARYNINJACOREAPI void BNFreeString (char * str );
14791496 BINARYNINJACOREAPI void BNFreeStringList (char * * strs , size_t count );
@@ -1504,6 +1521,7 @@ extern "C"
15041521 BINARYNINJACOREAPI char * BNGetUserDirectory (void );
15051522 BINARYNINJACOREAPI char * BNGetUserPluginDirectory (void );
15061523 BINARYNINJACOREAPI char * BNGetRepositoriesDirectory (void );
1524+ BINARYNINJACOREAPI char * BNGetSettingsFileName (void );
15071525 BINARYNINJACOREAPI void BNSaveLastRun (void );
15081526
15091527 BINARYNINJACOREAPI char * BNGetPathRelativeToBundledPluginDirectory (const char * path );
@@ -2859,7 +2877,94 @@ extern "C"
28592877 // Filesystem functionality
28602878 BINARYNINJACOREAPI int BNDeleteFile (const char * path );
28612879 BINARYNINJACOREAPI int BNDeleteDirectory (const char * path , int contentsOnly );
2862- BINARYNINJACOREAPI int BNCreateDirectory (const char * path );
2880+ BINARYNINJACOREAPI bool BNCreateDirectory (const char * path , bool createSubdirectories );
2881+ BINARYNINJACOREAPI bool BNPathExists (const char * path );
2882+ BINARYNINJACOREAPI bool BNIsPathDirectory (const char * path );
2883+ BINARYNINJACOREAPI bool BNIsPathRegularFile (const char * path );
2884+
2885+ // Settings APIs
2886+ BINARYNINJACOREAPI bool BNProcessMainSettingsFile ();
2887+ BINARYNINJACOREAPI bool BNSettingGetBool (const char * settingGroup , const char * name , bool defaultValue );
2888+ BINARYNINJACOREAPI uint64_t BNSettingGetInteger (const char * settingGroup , const char * name , uint64_t defaultValue );
2889+ BINARYNINJACOREAPI char * BNSettingGetString (const char * settingGroup , const char * name , const char * defaultValue );
2890+ // intoutSize is number of elements in defaultValue one entry and number of elements in return type on exit
2891+ BINARYNINJACOREAPI uint64_t * BNSettingGetIntegerList (const char * settingGroup , const char * name , uint64_t * defaultValue , size_t * inoutSize );
2892+ // intoutSize is number of elements in defaultValue one entry and number of elements in return type on exit
2893+ BINARYNINJACOREAPI const char * * BNSettingGetStringList (const char * settingGroup , const char * name , const char * * defaultValue , size_t * inoutSize );
2894+ BINARYNINJACOREAPI double BNSettingGetDouble (const char * settingGroup , const char * name , double defaultValue );
2895+
2896+ BINARYNINJACOREAPI void BNFreeSettingStringList (char * * stringList , size_t size );
2897+ BINARYNINJACOREAPI void BNFreeSettingIntegerList (uint64_t * integerList );
2898+ //Check the type of a core setting
2899+ BINARYNINJACOREAPI bool BNSettingIsBool (const char * name , const char * settingGroup );
2900+ BINARYNINJACOREAPI bool BNSettingIsInteger (const char * name , const char * settingGroup );
2901+ BINARYNINJACOREAPI bool BNSettingIsString (const char * name , const char * settingGroup );
2902+ BINARYNINJACOREAPI bool BNSettingIsStringList (const char * name , const char * settingGroup );
2903+ BINARYNINJACOREAPI bool BNSettingIsIntegerList (const char * name , const char * settingGroup );
2904+ BINARYNINJACOREAPI bool BNSettingIsDouble (const char * name , const char * settingGroup );
2905+ // Check if a plugin setting is present
2906+ BINARYNINJACOREAPI bool BNSettingIsPresent (const char * settingGroup , const char * name );
2907+
2908+ BINARYNINJACOREAPI bool BNSettingSetBool (const char * settingGroup , const char * name , bool value , bool autoFlush );
2909+ BINARYNINJACOREAPI bool BNSettingSetInteger (const char * settingGroup , const char * name , uint64_t value , bool autoFlush );
2910+ BINARYNINJACOREAPI bool BNSettingSetString (const char * settingGroup , const char * name , const char * value , bool autoFlush );
2911+ BINARYNINJACOREAPI bool BNSettingSetDouble (const char * settingGroup , const char * name , double value , bool autoFlush );
2912+ BINARYNINJACOREAPI bool BNSettingSetIntegerList (const char * settingGroup , const char * name , const uint64_t * value , size_t size , bool autoFlush );
2913+ BINARYNINJACOREAPI bool BNSettingSetStringList (const char * settingGroup , const char * name , const char * * value , size_t size , bool autoFlush );
2914+
2915+ BINARYNINJACOREAPI bool BNSettingFlushSettings ();
2916+
2917+ //Metadata APIs
2918+
2919+ // Create Metadata of various types
2920+ BINARYNINJACOREAPI BNMetadata * BNNewMetadataReference (BNMetadata * data );
2921+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredBooleanData (bool data );
2922+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredStringData (const char * data );
2923+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredUnsignedIntegerData (uint64_t data );
2924+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredSignedIntegerData (int64_t data );
2925+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredDoubleData (double data );
2926+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredBooleanListData (const bool * data , size_t size );
2927+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredStringListData (const char * * data , size_t size );
2928+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredUnsignedIntegerListData (const uint64_t * data , size_t size );
2929+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredSignedIntegerListData (const int64_t * data , size_t size );
2930+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredDoubleListData (const double * data , size_t size );
2931+ BINARYNINJACOREAPI BNMetadata * BNCreateStructuredRawData (const uint8_t * data , size_t size );
2932+ BINARYNINJACOREAPI void BNFreeMetadata (BNMetadata * data );
2933+ BINARYNINJACOREAPI void BNFreeMetadataBooleanList (bool * data );
2934+ BINARYNINJACOREAPI void BNFreeMetadataStringList (char * * data , size_t size );
2935+ BINARYNINJACOREAPI void BNFreeMetadataUnsignedIntegerList (uint64_t * data );
2936+ BINARYNINJACOREAPI void BNFreeMetadataSignedIntegerList (int64_t * data );
2937+ BINARYNINJACOREAPI void BNFreeMetadataDoubleList (double * data );
2938+ BINARYNINJACOREAPI void BNFreeMetadataRaw (uint8_t * data );
2939+ // Retrieve Structured Data
2940+ BINARYNINJACOREAPI bool BNMetadataGetBoolean (BNMetadata * data );
2941+ BINARYNINJACOREAPI char * BNMetadataGetString (BNMetadata * data );
2942+ BINARYNINJACOREAPI uint64_t BNMetadataGetUnsignedInteger (BNMetadata * data );
2943+ BINARYNINJACOREAPI int64_t BNMetadataGetSignedInteger (BNMetadata * data );
2944+ BINARYNINJACOREAPI double BNMetadataGetDouble (BNMetadata * data );
2945+ BINARYNINJACOREAPI bool * BNMetadataGetBooleanList (BNMetadata * data , size_t * size );
2946+ BINARYNINJACOREAPI char * * BNMetadataGetStringList (BNMetadata * data , size_t * size );
2947+ BINARYNINJACOREAPI uint64_t * BNMetadataGetUnsignedIntegerList (BNMetadata * data , size_t * size );
2948+ BINARYNINJACOREAPI int64_t * BNMetadataGetSignedIntegerList (BNMetadata * data , size_t * size );
2949+ BINARYNINJACOREAPI double * BNMetadataGetDoubleList (BNMetadata * data , size_t * size );
2950+ BINARYNINJACOREAPI uint8_t * BNMetadataGetRaw (BNMetadata * data , size_t * size );
2951+ //Query type of Metadata
2952+ BINARYNINJACOREAPI BNMetadataType BNMetadataGetType (BNMetadata * data );
2953+ BINARYNINJACOREAPI bool BNMetadataIsBoolean (BNMetadata * data );
2954+ BINARYNINJACOREAPI bool BNMetadataIsString (BNMetadata * data );
2955+ BINARYNINJACOREAPI bool BNMetadataIsUnsignedInteger (BNMetadata * data );
2956+ BINARYNINJACOREAPI bool BNMetadataIsSignedInteger (BNMetadata * data );
2957+ BINARYNINJACOREAPI bool BNMetadataIsDouble (BNMetadata * data );
2958+ BINARYNINJACOREAPI bool BNMetadataIsBooleanList (BNMetadata * data );
2959+ BINARYNINJACOREAPI bool BNMetadataIsStringList (BNMetadata * data );
2960+ BINARYNINJACOREAPI bool BNMetadataIsUnsignedIntegerList (BNMetadata * data );
2961+ BINARYNINJACOREAPI bool BNMetadataIsSignedIntegerList (BNMetadata * data );
2962+ BINARYNINJACOREAPI bool BNMetadataIsDoubleList (BNMetadata * data );
2963+ BINARYNINJACOREAPI bool BNMetadataIsRaw (BNMetadata * data );
2964+
2965+ // Store/Query structured data to/from a BinaryView
2966+ BINARYNINJACOREAPI void BNBinaryViewStoreMetadata (BNBinaryView * view , const char * key , BNMetadata * value );
2967+ BINARYNINJACOREAPI bool BNBinaryViewQueryMetadata (BNBinaryView * view , const char * key , BNMetadata * * value );
28632968#ifdef __cplusplus
28642969}
28652970#endif
0 commit comments