From cae26921cf2b2e564f66e58b77a3963fe36f6d2d Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Mon, 8 Sep 2025 20:04:36 -0400 Subject: Add constant renderer API --- binaryninjacore.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'binaryninjacore.h') diff --git a/binaryninjacore.h b/binaryninjacore.h index 60850f38..89037998 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -311,6 +311,7 @@ extern "C" typedef struct BNStringRef BNStringRef; typedef struct BNIndirectBranchInfo BNIndirectBranchInfo; typedef struct BNArchitectureAndAddress BNArchitectureAndAddress; + typedef struct BNConstantRenderer BNConstantRenderer; typedef struct BNRemoteFileSearchMatch { @@ -3814,6 +3815,17 @@ extern "C" char* value; } BNTypeAttribute; + typedef struct BNCustomConstantRenderer + { + void* context; + bool (*isValidForType)(void* ctxt, BNHighLevelILFunction* hlil, BNType* type); + bool (*renderConstant)(void* ctxt, BNHighLevelILFunction* hlil, size_t expr, BNType* type, int64_t val, + BNHighLevelILTokenEmitter* tokens, BNDisassemblySettings* settings, BNOperatorPrecedence precedence); + bool (*renderConstantPointer)(void* ctxt, BNHighLevelILFunction* hlil, size_t expr, BNType* type, int64_t val, + BNHighLevelILTokenEmitter* tokens, BNDisassemblySettings* settings, BNSymbolDisplayType symbolDisplay, + BNOperatorPrecedence precedence); + } BNCustomConstantRenderer; + BINARYNINJACOREAPI char* BNAllocString(const char* contents); BINARYNINJACOREAPI char* BNAllocStringWithLength(const char* contents, size_t len); BINARYNINJACOREAPI void BNFreeString(char* str); @@ -8690,6 +8702,22 @@ extern "C" BINARYNINJACOREAPI const char* BNGetStringRefContents(BNStringRef* ref); BINARYNINJACOREAPI size_t BNGetStringRefSize(BNStringRef* ref); + // Constant Renderers + BINARYNINJACOREAPI BNConstantRenderer* BNRegisterConstantRenderer( + const char* name, BNCustomConstantRenderer* renderer); + BINARYNINJACOREAPI BNConstantRenderer* BNGetConstantRendererByName(const char* name); + BINARYNINJACOREAPI BNConstantRenderer** BNGetConstantRendererList(size_t* count); + BINARYNINJACOREAPI void BNFreeConstantRendererList(BNLanguageRepresentationFunctionType** renderers); + BINARYNINJACOREAPI char* BNGetConstantRendererName(BNConstantRenderer* renderer); + BINARYNINJACOREAPI bool BNIsConstantRendererValidForType( + BNConstantRenderer* renderer, BNHighLevelILFunction* il, BNType* type); + BINARYNINJACOREAPI bool BNConstantRendererRenderConstant(BNConstantRenderer* renderer, BNHighLevelILFunction* il, + size_t exprIndex, BNType* type, int64_t val, BNHighLevelILTokenEmitter* tokens, BNDisassemblySettings* settings, + BNOperatorPrecedence precedence); + BINARYNINJACOREAPI bool BNConstantRendererRenderConstantPointer(BNConstantRenderer* renderer, + BNHighLevelILFunction* il, size_t exprIndex, BNType* type, int64_t val, BNHighLevelILTokenEmitter* tokens, + BNDisassemblySettings* settings, BNSymbolDisplayType symbolDisplay, BNOperatorPrecedence precedence); + #ifdef __cplusplus } #endif -- cgit v1.3.1