@@ -137,6 +137,7 @@ extern "C" |
137 | 137 | struct BNRepository; |
138 | 138 | struct BNRepoPlugin; |
139 | 139 | struct BNRepositoryManager; |
| 140 | + struct BNMetadata; |
140 | 141 |
|
141 | 142 | typedef bool (*BNLoadPluginCallback)(const char* repoPath, const char* pluginPath, void* ctx); |
142 | 143 |
|
@@ -1257,6 +1258,7 @@ extern "C" |
1257 | 1258 | SuccessfulScriptExecution |
1258 | 1259 | }; |
1259 | 1260 |
|
| 1261 | + |
1260 | 1262 | struct BNScriptingInstanceCallbacks |
1261 | 1263 | { |
1262 | 1264 | void* context; |
@@ -1474,6 +1476,21 @@ extern "C" |
1474 | 1476 | double seconds; |
1475 | 1477 | }; |
1476 | 1478 |
|
| 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 | + |
1477 | 1494 | BINARYNINJACOREAPI char* BNAllocString(const char* contents); |
1478 | 1495 | BINARYNINJACOREAPI void BNFreeString(char* str); |
1479 | 1496 | BINARYNINJACOREAPI void BNFreeStringList(char** strs, size_t count); |
@@ -1504,6 +1521,7 @@ extern "C" |
1504 | 1521 | BINARYNINJACOREAPI char* BNGetUserDirectory(void); |
1505 | 1522 | BINARYNINJACOREAPI char* BNGetUserPluginDirectory(void); |
1506 | 1523 | BINARYNINJACOREAPI char* BNGetRepositoriesDirectory(void); |
| 1524 | + BINARYNINJACOREAPI char* BNGetSettingsFileName(void); |
1507 | 1525 | BINARYNINJACOREAPI void BNSaveLastRun(void); |
1508 | 1526 |
|
1509 | 1527 | BINARYNINJACOREAPI char* BNGetPathRelativeToBundledPluginDirectory(const char* path); |
@@ -2859,7 +2877,94 @@ extern "C" |
2859 | 2877 | // Filesystem functionality |
2860 | 2878 | BINARYNINJACOREAPI int BNDeleteFile(const char* path); |
2861 | 2879 | 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); |
2863 | 2968 | #ifdef __cplusplus |
2864 | 2969 | } |
2865 | 2970 | #endif |
|