summaryrefslogtreecommitdiff
path: root/binaryninjacore.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2024-11-27 12:15:23 -0500
committerRusty Wagner <rusty.wagner@gmail.com>2025-01-24 12:52:12 -0500
commit8767400b712f12f459556844e27d9b9f5ff037bd (patch)
treebbac40ec6fb68b647e2f9bd4a0c528088072dc79 /binaryninjacore.h
parent1c81ef63a163b479d07f3182f7831fdb6548488b (diff)
Add line formatter API and a generic line formatter plugin
Diffstat (limited to 'binaryninjacore.h')
-rw-r--r--binaryninjacore.h57
1 files changed, 54 insertions, 3 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index bc785484..bba1c786 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -44,7 +44,7 @@
// 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 86
+#define BN_MINIMUM_CORE_ABI_VERSION 89
#ifdef __GNUC__
#ifdef BINARYNINJACORE_LIBRARY
@@ -302,6 +302,7 @@ extern "C"
typedef struct BNDemangler BNDemangler;
typedef struct BNFirmwareNinja BNFirmwareNinja;
typedef struct BNFirmwareNinjaReferenceNode BNFirmwareNinjaReferenceNode;
+ typedef struct BNLineFormatter BNLineFormatter;
//! Console log levels
typedef enum BNLogLevel
@@ -727,6 +728,7 @@ extern "C"
HighLevelILLinearDisassembly = 65,
WaitForIL = 66,
IndentHLILBody = 67,
+ DisableLineFormatting = 68,
// Debugging options
ShowFlagUsage = 128,
@@ -3439,6 +3441,7 @@ extern "C"
bool (*isValid)(void* ctxt, BNBinaryView* view);
BNTypePrinter* (*getTypePrinter)(void* ctxt);
BNTypeParser* (*getTypeParser)(void* ctxt);
+ BNLineFormatter* (*getLineFormatter)(void* ctxt);
BNDisassemblyTextLine* (*getFunctionTypeTokens)(
void* ctxt, BNFunction* func, BNDisassemblySettings* settings, size_t* count);
void (*freeLines)(void* ctxt, BNDisassemblyTextLine* lines, size_t count);
@@ -3538,6 +3541,28 @@ extern "C"
size_t unique;
} BNFirmwareNinjaDeviceAccesses;
+ typedef struct BNLineFormatterSettings
+ {
+ BNHighLevelILFunction* highLevelIL;
+ size_t desiredLineLength;
+ size_t minimumContentLength;
+ size_t tabWidth;
+ char* languageName;
+ char* commentStartString;
+ char* commentEndString;
+ char* annotationStartString;
+ char* annotationEndString;
+ } BNLineFormatterSettings;
+
+ typedef struct BNCustomLineFormatter
+ {
+ void* context;
+ BNDisassemblyTextLine* (*formatLines)(void* ctxt, BNDisassemblyTextLine* inLines, size_t inCount,
+ const BNLineFormatterSettings* settings, size_t* outCount);
+ void (*freeLines)(void* ctxt, BNDisassemblyTextLine* lines, size_t count);
+ } BNCustomLineFormatter;
+
+
BINARYNINJACOREAPI char* BNAllocString(const char* contents);
BINARYNINJACOREAPI char* BNAllocStringWithLength(const char* contents, size_t len);
BINARYNINJACOREAPI void BNFreeString(char* str);
@@ -5454,6 +5479,9 @@ extern "C"
// Disassembly settings
BINARYNINJACOREAPI BNDisassemblySettings* BNCreateDisassemblySettings(void);
+ BINARYNINJACOREAPI BNDisassemblySettings* BNDefaultDisassemblySettings(void);
+ BINARYNINJACOREAPI BNDisassemblySettings* BNDefaultGraphDisassemblySettings(void);
+ BINARYNINJACOREAPI BNDisassemblySettings* BNDefaultLinearDisassemblySettings(void);
BINARYNINJACOREAPI BNDisassemblySettings* BNNewDisassemblySettingsReference(BNDisassemblySettings* settings);
BINARYNINJACOREAPI BNDisassemblySettings* BNDuplicateDisassemblySettings(BNDisassemblySettings* settings);
BINARYNINJACOREAPI void BNFreeDisassemblySettings(BNDisassemblySettings* settings);
@@ -6144,15 +6172,19 @@ extern "C"
BNLanguageRepresentationFunctionType* type, BNBinaryView* view);
BINARYNINJACOREAPI BNTypePrinter* BNGetLanguageRepresentationFunctionTypePrinter(BNLanguageRepresentationFunctionType* type);
BINARYNINJACOREAPI BNTypeParser* BNGetLanguageRepresentationFunctionTypeParser(BNLanguageRepresentationFunctionType* type);
+ BINARYNINJACOREAPI BNLineFormatter* BNGetLanguageRepresentationFunctionTypeLineFormatter(
+ BNLanguageRepresentationFunctionType* type);
BINARYNINJACOREAPI BNDisassemblyTextLine* BNGetLanguageRepresentationFunctionTypeFunctionTypeTokens(
BNLanguageRepresentationFunctionType* type, BNFunction* func, BNDisassemblySettings* settings, size_t* count);
BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNCreateCustomLanguageRepresentationFunction(
- BNArchitecture* arch, BNFunction* func, BNHighLevelILFunction* highLevelIL,
- BNCustomLanguageRepresentationFunction* callbacks);
+ BNLanguageRepresentationFunctionType* type, BNArchitecture* arch, BNFunction* func,
+ BNHighLevelILFunction* highLevelIL, BNCustomLanguageRepresentationFunction* callbacks);
BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNNewLanguageRepresentationFunctionReference(
BNLanguageRepresentationFunction* func);
BINARYNINJACOREAPI void BNFreeLanguageRepresentationFunction(BNLanguageRepresentationFunction* func);
+ BINARYNINJACOREAPI BNLanguageRepresentationFunctionType* BNGetLanguageRepresentationType(
+ BNLanguageRepresentationFunction* func);
BINARYNINJACOREAPI BNArchitecture* BNGetLanguageRepresentationArchitecture(BNLanguageRepresentationFunction* func);
BINARYNINJACOREAPI BNFunction* BNGetLanguageRepresentationOwnerFunction(BNLanguageRepresentationFunction* func);
BINARYNINJACOREAPI BNHighLevelILFunction* BNGetLanguageRepresentationILFunction(BNLanguageRepresentationFunction* func);
@@ -8057,6 +8089,25 @@ extern "C"
BINARYNINJACOREAPI void BNFreeFirmwareNinjaReferenceNode(BNFirmwareNinjaReferenceNode* node);
BINARYNINJACOREAPI BNFirmwareNinjaReferenceNode* BNNewFirmwareNinjaReferenceNodeReference(BNFirmwareNinjaReferenceNode* node);
BINARYNINJACOREAPI void BNFreeFirmwareNinjaReferenceNodes(BNFirmwareNinjaReferenceNode** nodes, size_t count);
+
+ // Line formatters
+ BINARYNINJACOREAPI BNLineFormatter* BNRegisterLineFormatter(const char* name, BNCustomLineFormatter* callbacks);
+ BINARYNINJACOREAPI BNLineFormatter** BNGetLineFormatterList(size_t* count);
+ BINARYNINJACOREAPI void BNFreeLineFormatterList(BNLineFormatter** formatters);
+ BINARYNINJACOREAPI BNLineFormatter* BNGetLineFormatterByName(const char* name);
+ BINARYNINJACOREAPI BNLineFormatter* BNGetDefaultLineFormatter();
+
+ BINARYNINJACOREAPI char* BNGetLineFormatterName(BNLineFormatter* formatter);
+
+ BINARYNINJACOREAPI BNDisassemblyTextLine* BNFormatLines(BNLineFormatter* formatter, BNDisassemblyTextLine* inLines,
+ size_t inCount, const BNLineFormatterSettings* settings, size_t* outCount);
+
+ BINARYNINJACOREAPI BNLineFormatterSettings* BNGetDefaultLineFormatterSettings(
+ BNDisassemblySettings* settings, BNHighLevelILFunction* func);
+ BINARYNINJACOREAPI BNLineFormatterSettings* BNGetLanguageRepresentationLineFormatterSettings(
+ BNDisassemblySettings* settings, BNLanguageRepresentationFunction* func);
+ BINARYNINJACOREAPI void BNFreeLineFormatterSettings(BNLineFormatterSettings* settings);
+
#ifdef __cplusplus
}
#endif