diff options
Diffstat (limited to 'binaryninjacore.h')
| -rw-r--r-- | binaryninjacore.h | 267 |
1 files changed, 247 insertions, 20 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h index aaf61c6d..93f97dd1 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -37,14 +37,14 @@ // Current ABI version for linking to the core. This is incremented any time // there are changes to the API that affect linking, including new functions, // new types, or modifications to existing functions or types. -#define BN_CURRENT_CORE_ABI_VERSION 78 +#define BN_CURRENT_CORE_ABI_VERSION 79 // Minimum ABI version that is supported for loading of plugins. Plugins that // are linked to an ABI version less than this will not be able to load and // 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 75 +#define BN_MINIMUM_CORE_ABI_VERSION 79 #ifdef __GNUC__ #ifdef BINARYNINJACORE_LIBRARY @@ -224,6 +224,8 @@ extern "C" typedef struct BNMediumLevelILFunction BNMediumLevelILFunction; typedef struct BNHighLevelILFunction BNHighLevelILFunction; typedef struct BNLanguageRepresentationFunction BNLanguageRepresentationFunction; + typedef struct BNLanguageRepresentationFunctionType BNLanguageRepresentationFunctionType; + typedef struct BNHighLevelILTokenEmitter BNHighLevelILTokenEmitter; typedef struct BNType BNType; typedef struct BNTypeBuilder BNTypeBuilder; typedef struct BNTypeLibrary BNTypeLibrary; @@ -694,6 +696,12 @@ extern "C" HighLevelLanguageRepresentationFunctionGraph = 10, } BNFunctionGraphType; + typedef struct BNFunctionViewType + { + BNFunctionGraphType type; + const char* name; // Only used for HighLevelLanguageRepresentationFunctionGraph + } BNFunctionViewType; + typedef enum BNDisassemblyOption { ShowAddress = 0, @@ -2992,7 +3000,7 @@ extern "C" void* ctxt, BNBinaryView* view, uint64_t addr, BNType* type, BNTypeContext* typeCtx, size_t ctxCount); BNDisassemblyTextLine* (*getLinesForData)(void* ctxt, BNBinaryView* view, uint64_t addr, BNType* type, const BNInstructionTextToken* prefix, size_t prefixCount, size_t width, size_t* count, - BNTypeContext* typeCtx, size_t ctxCount); + BNTypeContext* typeCtx, size_t ctxCount, const char* language); void (*freeLines)(void* ctx, BNDisassemblyTextLine* lines, size_t count); } BNCustomDataRenderer; @@ -3335,6 +3343,108 @@ extern "C" void (*freeVarName)(void* ctxt, BNQualifiedName* name); } BNDemanglerCallbacks; + typedef enum BNScopeType + { + OneLineScopeType, + HasSubScopeScopeType, + BlockScopeType, + SwitchScopeType, + CaseScopeType + } BNScopeType; + + typedef enum BNBraceRequirement + { + OptionalBraces, + BracesNotAllowed, + BracesAlwaysRequired + } BNBraceRequirement; + + typedef struct BNTokenEmitterExpr + { + uint64_t address; + uint32_t sourceOperand; + size_t exprIndex; + size_t instrIndex; + } BNTokenEmitterExpr; + + typedef enum BNOperatorPrecedence + { + TopLevelOperatorPrecedence = 0, + AssignmentOperatorPrecedence, + TernaryOperatorPrecedence, + LogicalOrOperatorPrecedence, + LogicalAndOperatorPrecedence, + BitwiseOrOperatorPrecedence, + BitwiseXorOperatorPrecedence, + BitwiseAndOperatorPrecedence, + EqualityOperatorPrecedence, + CompareOperatorPrecedence, + ShiftOperatorPrecedence, + AddOperatorPrecedence, + SubOperatorPrecedence, + MultiplyOperatorPrecedence, + DivideOperatorPrecedence, + LowUnaryOperatorPrecedence, + UnaryOperatorPrecedence, + HighUnaryOperatorPrecedence, + MemberAndFunctionOperatorPrecedence, + ScopeOperatorPrecedence + } BNOperatorPrecedence; + + typedef enum BNSymbolDisplayType + { + DisplaySymbolOnly, + AddressOfDataSymbols, + DereferenceNonDataSymbols + } BNSymbolDisplayType; + + typedef enum BNSymbolDisplayResult + { + NoSymbolAvailable, + DataSymbolResult, + OtherSymbolResult + } BNSymbolDisplayResult; + + typedef struct BNCustomLanguageRepresentationFunction + { + void* context; + void (*freeObject)(void* ctxt); + void (*externalRefTaken)(void* ctxt); + void (*externalRefReleased)(void* ctxt); + void (*initTokenEmitter)(void* ctxt, BNHighLevelILTokenEmitter* tokens); + void (*getExprText)(void* ctxt, BNHighLevelILFunction* il, size_t exprIndex, BNHighLevelILTokenEmitter* tokens, + BNDisassemblySettings* settings, bool asFullAst, BNOperatorPrecedence precedence, bool statement); + void (*beginLines)(void* ctxt, BNHighLevelILFunction* il, size_t exprIndex, BNHighLevelILTokenEmitter* tokens); + void (*endLines)(void* ctxt, BNHighLevelILFunction* il, size_t exprIndex, BNHighLevelILTokenEmitter* tokens); + char* (*getCommentStartString)(void* ctxt); + char* (*getCommentEndString)(void* ctxt); + char* (*getAnnotationStartString)(void* ctxt); + char* (*getAnnotationEndString)(void* ctxt); + } BNCustomLanguageRepresentationFunction; + + typedef struct BNCustomLanguageRepresentationFunctionType + { + void* context; + BNLanguageRepresentationFunction* (*create)( + void* ctxt, BNArchitecture* arch, BNFunction* owner, BNHighLevelILFunction* highLevelIL); + bool (*isValid)(void* ctxt, BNBinaryView* view); + BNTypePrinter* (*getTypePrinter)(void* ctxt); + BNTypeParser* (*getTypeParser)(void* ctxt); + BNDisassemblyTextLine* (*getFunctionTypeTokens)( + void* ctxt, BNFunction* func, BNDisassemblySettings* settings, size_t* count); + void (*freeLines)(void* ctxt, BNDisassemblyTextLine* lines, size_t count); + } BNCustomLanguageRepresentationFunctionType; + + typedef enum BNBuiltinType + { + BuiltinNone, + BuiltinMemcpy, + BuiltinMemset, + BuiltinStrncpy, + BuiltinStrcpy, + BuiltinWcscpy + } BNBuiltinType; + typedef bool(*BNProgressFunction)(void*, size_t, size_t); typedef bool(*BNCollaborationAnalysisConflictHandler)(void*, const char** keys, BNAnalysisMergeConflict** conflicts, size_t conflictCount); typedef bool(*BNCollaborationNameChangesetFunction)(void*, BNCollaborationChangeset*); @@ -3504,7 +3614,7 @@ extern "C" BINARYNINJACOREAPI uint8_t BNGetDataBufferByte(BNDataBuffer* buf, size_t offset); BINARYNINJACOREAPI void BNSetDataBufferByte(BNDataBuffer* buf, size_t offset, uint8_t val); - BINARYNINJACOREAPI char* BNDataBufferToEscapedString(BNDataBuffer* buf, bool nullTerminates); + BINARYNINJACOREAPI char* BNDataBufferToEscapedString(BNDataBuffer* buf, bool nullTerminates, bool escapePrintable); BINARYNINJACOREAPI BNDataBuffer* BNDecodeEscapedString(const char* str); BINARYNINJACOREAPI char* BNDataBufferToBase64(BNDataBuffer* buf); BINARYNINJACOREAPI BNDataBuffer* BNDecodeBase64(const char* str); @@ -3918,29 +4028,29 @@ extern "C" BINARYNINJACOREAPI bool BNFindNextData( BNBinaryView* view, uint64_t start, BNDataBuffer* data, uint64_t* result, BNFindFlag flags); BINARYNINJACOREAPI bool BNFindNextText(BNBinaryView* view, uint64_t start, const char* data, uint64_t* result, - BNDisassemblySettings* settings, BNFindFlag flags, BNFunctionGraphType graph); + BNDisassemblySettings* settings, BNFindFlag flags, BNFunctionViewType viewType); BINARYNINJACOREAPI bool BNFindNextConstant(BNBinaryView* view, uint64_t start, uint64_t constant, uint64_t* result, - BNDisassemblySettings* settings, BNFunctionGraphType graph); + BNDisassemblySettings* settings, BNFunctionViewType viewType); BINARYNINJACOREAPI bool BNFindNextDataWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, BNDataBuffer* data, uint64_t* result, BNFindFlag flags, void* ctxt, BNProgressFunction progress); BINARYNINJACOREAPI bool BNFindNextTextWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, const char* data, uint64_t* result, BNDisassemblySettings* settings, BNFindFlag flags, - BNFunctionGraphType graph, void* ctxt, BNProgressFunction progress); + BNFunctionViewType viewType, void* ctxt, BNProgressFunction progress); BINARYNINJACOREAPI bool BNFindNextConstantWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, - uint64_t constant, uint64_t* result, BNDisassemblySettings* settings, BNFunctionGraphType graph, void* ctxt, + uint64_t constant, uint64_t* result, BNDisassemblySettings* settings, BNFunctionViewType viewType, void* ctxt, BNProgressFunction progress); BINARYNINJACOREAPI bool BNFindAllDataWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, BNDataBuffer* data, BNFindFlag flags, void* ctxt, BNProgressFunction progress, void* matchCtxt, bool (*matchCallback)(void* matchCtxt, uint64_t addr, BNDataBuffer* match)); BINARYNINJACOREAPI bool BNFindAllTextWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, - const char* data, BNDisassemblySettings* settings, BNFindFlag flags, BNFunctionGraphType graph, void* ctxt, + const char* data, BNDisassemblySettings* settings, BNFindFlag flags, BNFunctionViewType viewType, void* ctxt, BNProgressFunction progress, void* matchCtxt, bool (*matchCallback)(void* matchCtxt, uint64_t addr, const char* match, BNLinearDisassemblyLine* line)); BINARYNINJACOREAPI bool BNFindAllConstantWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, - uint64_t constant, BNDisassemblySettings* settings, BNFunctionGraphType graph, void* ctxt, + uint64_t constant, BNDisassemblySettings* settings, BNFunctionViewType viewType, void* ctxt, BNProgressFunction progress, void* matchCtxt, bool (*matchCallback)(void* matchCtxt, uint64_t addr, BNLinearDisassemblyLine* line)); @@ -3996,6 +4106,9 @@ extern "C" BINARYNINJACOREAPI void BNClearUserGlobalPointerValue(BNBinaryView* view); BINARYNINJACOREAPI void BNSetUserGlobalPointerValue(BNBinaryView* view, BNRegisterValueWithConfidence value); + BINARYNINJACOREAPI bool BNStringifyUnicodeData(BNBinaryView* data, BNArchitecture* arch, const BNDataBuffer* buffer, + bool allowShortStrings, char** string, BNStringType* type); + // Raw binary data view BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataView(BNFileMetadata* file); BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromBuffer(BNFileMetadata* file, BNDataBuffer* buf); @@ -4370,10 +4483,13 @@ extern "C" BINARYNINJACOREAPI BNMediumLevelILFunction* BNGetFunctionMappedMediumLevelILIfAvailable(BNFunction* func); BINARYNINJACOREAPI BNHighLevelILFunction* BNGetFunctionHighLevelIL(BNFunction* func); BINARYNINJACOREAPI BNHighLevelILFunction* BNGetFunctionHighLevelILIfAvailable(BNFunction* func); - BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNGetFunctionLanguageRepresentation(BNFunction* func); - BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNGetFunctionLanguageRepresentationIfAvailable(BNFunction* func); + BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNGetFunctionLanguageRepresentation( + BNFunction* func, const char* language); + BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNGetFunctionLanguageRepresentationIfAvailable( + BNFunction* func, const char* language); - BINARYNINJACOREAPI BNDataBuffer* BNGetConstantData(BNFunction* func, BNRegisterValueType state, uint64_t value, size_t size); + BINARYNINJACOREAPI BNDataBuffer* BNGetConstantData(BNFunction* func, BNRegisterValueType state, uint64_t value, + size_t size, BNBuiltinType* builtin); BINARYNINJACOREAPI BNRegisterValue BNGetRegisterValueAtInstruction( BNFunction* func, BNArchitecture* arch, uint64_t addr, uint32_t reg); @@ -4556,6 +4672,10 @@ extern "C" BINARYNINJACOREAPI void BNResetDisassemblyTextRendererDeduplicatedComments(BNDisassemblyTextRenderer* renderer); BINARYNINJACOREAPI bool BNGetDisassemblyTextRendererSymbolTokens(BNDisassemblyTextRenderer* renderer, uint64_t addr, size_t size, size_t operand, BNInstructionTextToken** result, size_t* count); + BINARYNINJACOREAPI BNSymbolDisplayResult BNGetDisassemblyTextRendererSymbolTokensStatic(uint64_t addr, size_t size, + size_t operand, BNBinaryView* data, size_t maxSymbolWidth, BNFunction* func, uint8_t confidence, + BNSymbolDisplayType symbolDisplay, BNOperatorPrecedence precedence, uint64_t instrAddr, uint64_t exprIndex, + BNInstructionTextToken** result, size_t* count); BINARYNINJACOREAPI BNInstructionTextToken* BNGetDisassemblyTextRendererStackVariableReferenceTokens( BNDisassemblyTextRenderer* renderer, BNStackVariableReference* ref, size_t* count); BINARYNINJACOREAPI bool BNIsIntegerToken(BNInstructionTextTokenType type); @@ -4565,6 +4685,7 @@ extern "C" BINARYNINJACOREAPI BNDisassemblyTextLine* BNDisassemblyTextRendererWrapComment(BNDisassemblyTextRenderer* renderer, const BNDisassemblyTextLine* inLine, size_t* outLineCount, const char* comment, bool hasAutoAnnotations, const char* leadingSpaces, const char* indentSpaces); + BINARYNINJACOREAPI char* BNGetStringLiteralPrefix(BNStringType type); BINARYNINJACOREAPI void BNMarkFunctionAsRecentlyUsed(BNFunction* func); BINARYNINJACOREAPI void BNMarkBasicBlockAsRecentlyUsed(BNBasicBlock* block); @@ -4796,7 +4917,7 @@ extern "C" BINARYNINJACOREAPI BNLinearViewObject* BNCreateLinearViewHighLevelILSSAForm( BNBinaryView* view, BNDisassemblySettings* settings); BINARYNINJACOREAPI BNLinearViewObject* BNCreateLinearViewLanguageRepresentation( - BNBinaryView* view, BNDisassemblySettings* settings); + BNBinaryView* view, BNDisassemblySettings* settings, const char* language); BINARYNINJACOREAPI BNLinearViewObject* BNCreateLinearViewDataOnly( BNBinaryView* view, BNDisassemblySettings* settings); BINARYNINJACOREAPI BNLinearViewObject* BNCreateLinearViewSingleFunctionDisassembly( @@ -4820,7 +4941,7 @@ extern "C" BINARYNINJACOREAPI BNLinearViewObject* BNCreateLinearViewSingleFunctionHighLevelILSSAForm( BNFunction* func, BNDisassemblySettings* settings); BINARYNINJACOREAPI BNLinearViewObject* BNCreateLinearViewSingleFunctionLanguageRepresentation( - BNFunction* func, BNDisassemblySettings* settings); + BNFunction* func, BNDisassemblySettings* settings, const char* language); BINARYNINJACOREAPI BNLinearViewObject* BNNewLinearViewObjectReference(BNLinearViewObject* obj); BINARYNINJACOREAPI void BNFreeLinearViewObject(BNLinearViewObject* obj); BINARYNINJACOREAPI BNLinearViewObject* BNGetFirstLinearViewObjectChild(BNLinearViewObject* obj); @@ -5245,7 +5366,7 @@ extern "C" // Flow graphs BINARYNINJACOREAPI BNFlowGraph* BNCreateFlowGraph(void); BINARYNINJACOREAPI BNFlowGraph* BNCreateFunctionGraph( - BNFunction* func, BNFunctionGraphType type, BNDisassemblySettings* settings); + BNFunction* func, BNFunctionViewType type, BNDisassemblySettings* settings); BINARYNINJACOREAPI BNFlowGraph* BNCreateLowLevelILFunctionGraph( BNLowLevelILFunction* func, BNDisassemblySettings* settings); BINARYNINJACOREAPI BNFlowGraph* BNCreateMediumLevelILFunctionGraph( @@ -5790,6 +5911,8 @@ extern "C" BNHighLevelILFunction* func, const BNVariable* var, const size_t version, const size_t instr); BINARYNINJACOREAPI bool BNIsHighLevelILVarLiveAt( BNHighLevelILFunction* func, const BNVariable* var, const size_t instr); + BINARYNINJACOREAPI bool BNHighLevelILHasSideEffects(BNHighLevelILFunction* func, size_t exprIndex); + BINARYNINJACOREAPI BNScopeType BNGetHighLevelILExprScopeType(BNHighLevelILFunction* func, size_t exprIndex); BINARYNINJACOREAPI BNVariable* BNGetHighLevelILVariables(BNHighLevelILFunction* func, size_t* count); BINARYNINJACOREAPI BNVariable* BNGetHighLevelILAliasedVariables(BNHighLevelILFunction* func, size_t* count); @@ -5895,12 +6018,49 @@ extern "C" BNBinaryView* view, const BNQualifiedName* typeName, BNTypeLibrary** lib, BNQualifiedName* resultName); // Language Representation + BINARYNINJACOREAPI BNLanguageRepresentationFunctionType* BNRegisterLanguageRepresentationFunctionType( + const char* name, BNCustomLanguageRepresentationFunctionType* type); + BINARYNINJACOREAPI BNLanguageRepresentationFunctionType* BNGetLanguageRepresentationFunctionTypeByName(const char* name); + BINARYNINJACOREAPI BNLanguageRepresentationFunctionType** BNGetLanguageRepresentationFunctionTypeList(size_t* count); + BINARYNINJACOREAPI void BNFreeLanguageRepresentationFunctionTypeList(BNLanguageRepresentationFunctionType** types); + BINARYNINJACOREAPI char* BNGetLanguageRepresentationFunctionTypeName(BNLanguageRepresentationFunctionType* type); BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNCreateLanguageRepresentationFunction( - BNArchitecture* arch, BNFunction* func); + BNLanguageRepresentationFunctionType* type, BNArchitecture* arch, BNFunction* func, + BNHighLevelILFunction* highLevelIL); + BINARYNINJACOREAPI bool BNIsLanguageRepresentationFunctionTypeValid( + BNLanguageRepresentationFunctionType* type, BNBinaryView* view); + BINARYNINJACOREAPI BNTypePrinter* BNGetLanguageRepresentationFunctionTypePrinter(BNLanguageRepresentationFunctionType* type); + BINARYNINJACOREAPI BNTypeParser* BNGetLanguageRepresentationFunctionTypeParser(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); BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNNewLanguageRepresentationFunctionReference( - BNLanguageRepresentationFunction* func); + BNLanguageRepresentationFunction* func); BINARYNINJACOREAPI void BNFreeLanguageRepresentationFunction(BNLanguageRepresentationFunction* func); + BINARYNINJACOREAPI BNArchitecture* BNGetLanguageRepresentationArchitecture(BNLanguageRepresentationFunction* func); BINARYNINJACOREAPI BNFunction* BNGetLanguageRepresentationOwnerFunction(BNLanguageRepresentationFunction* func); + BINARYNINJACOREAPI BNHighLevelILFunction* BNGetLanguageRepresentationILFunction(BNLanguageRepresentationFunction* func); + BINARYNINJACOREAPI BNDisassemblyTextLine* BNGetLanguageRepresentationFunctionExprText( + BNLanguageRepresentationFunction* func, BNHighLevelILFunction* il, size_t exprIndex, + BNDisassemblySettings* settings, bool asFullAst, BNOperatorPrecedence precedence, bool statement, size_t* count); + BINARYNINJACOREAPI BNDisassemblyTextLine* BNGetLanguageRepresentationFunctionLinearLines( + BNLanguageRepresentationFunction* func, BNHighLevelILFunction* il, size_t exprIndex, + BNDisassemblySettings* settings, bool asFullAst, size_t* count); + BINARYNINJACOREAPI BNDisassemblyTextLine* BNGetLanguageRepresentationFunctionBlockLines( + BNLanguageRepresentationFunction* func, BNBasicBlock* block, BNDisassemblySettings* settings, size_t* count); + BINARYNINJACOREAPI BNHighlightColor BNGetLanguageRepresentationFunctionHighlight( + BNLanguageRepresentationFunction* func, BNBasicBlock* block); + BINARYNINJACOREAPI char* BNGetLanguageRepresentationFunctionCommentStartString( + BNLanguageRepresentationFunction* func); + BINARYNINJACOREAPI char* BNGetLanguageRepresentationFunctionCommentEndString( + BNLanguageRepresentationFunction* func); + BINARYNINJACOREAPI char* BNGetLanguageRepresentationFunctionAnnotationStartString( + BNLanguageRepresentationFunction* func); + BINARYNINJACOREAPI char* BNGetLanguageRepresentationFunctionAnnotationEndString( + BNLanguageRepresentationFunction* func); // Types BINARYNINJACOREAPI bool BNTypesEqual(BNType* a, BNType* b); @@ -5996,6 +6156,7 @@ extern "C" BINARYNINJACOREAPI BNReferenceType BNTypeGetReferenceType(BNType* type); BINARYNINJACOREAPI BNPointerBaseType BNTypeGetPointerBaseType(BNType* type); BINARYNINJACOREAPI int64_t BNTypeGetPointerBaseOffset(BNType* type); + BINARYNINJACOREAPI BNNameType BNTypeGetNameType(BNType* type); BINARYNINJACOREAPI char* BNGetTypeAlternateName(BNType* type); BINARYNINJACOREAPI uint32_t BNTypeGetSystemCallNumber(BNType* type); BINARYNINJACOREAPI bool BNTypeIsSystemCall(BNType* type); @@ -6003,6 +6164,7 @@ extern "C" BINARYNINJACOREAPI char* BNGetTypePointerSuffixString(BNType* type); BINARYNINJACOREAPI BNInstructionTextToken* BNGetTypePointerSuffixTokens(BNType* type, uint8_t baseConfidence, size_t* count); BINARYNINJACOREAPI void BNFreePointerSuffixList(BNPointerSuffix* suffix, size_t count); + BINARYNINJACOREAPI bool BNTypeShouldDisplayReturnType(BNType* type); BINARYNINJACOREAPI char* BNGetTypeString(BNType* type, BNPlatform* platform, BNTokenEscapingType escaping); BINARYNINJACOREAPI char* BNGetTypeStringBeforeName(BNType* type, BNPlatform* platform, BNTokenEscapingType escaping); @@ -6155,6 +6317,11 @@ extern "C" BINARYNINJACOREAPI BNStructureVariant BNGetStructureType(BNStructure* s); BINARYNINJACOREAPI BNBaseStructure* BNGetBaseStructuresForStructure(BNStructure* s, size_t* count); BINARYNINJACOREAPI void BNFreeBaseStructureList(BNBaseStructure* bases, size_t count); + BINARYNINJACOREAPI bool BNResolveStructureMemberOrBaseMember(BNStructure* s, BNBinaryView* data, uint64_t offset, + size_t size, void* callbackContext, + void (*resolveFunc)(void* ctxt, BNNamedTypeReference* baseName, BNStructure* resolvedStruct, size_t memberIndex, + uint64_t structOffset, uint64_t adjustedOffset, BNStructureMember member), + bool memberIndexHintValid, size_t memberIndexHint); BINARYNINJACOREAPI BNStructure* BNStructureWithReplacedStructure( BNStructure* s, BNStructure* from, BNStructure* to); @@ -7120,10 +7287,10 @@ extern "C" void* ctxt, BNBinaryView* view, uint64_t addr, BNType* type, BNTypeContext* typeCtx, size_t ctxCount); BINARYNINJACOREAPI BNDisassemblyTextLine* BNGetLinesForData(void* ctxt, BNBinaryView* view, uint64_t addr, BNType* type, const BNInstructionTextToken* prefix, size_t prefixCount, size_t width, size_t* count, - BNTypeContext* typeCtx, size_t ctxCount); + BNTypeContext* typeCtx, size_t ctxCount, const char* language); BINARYNINJACOREAPI BNDisassemblyTextLine* BNRenderLinesForData(BNBinaryView* data, uint64_t addr, BNType* type, const BNInstructionTextToken* prefix, size_t prefixCount, size_t width, size_t* count, BNTypeContext* typeCtx, - size_t ctxCount); + size_t ctxCount, const char* language); BINARYNINJACOREAPI void BNFreeDataRenderer(BNDataRenderer* renderer); BINARYNINJACOREAPI BNDataRendererContainer* BNGetDataRendererContainer(void); BINARYNINJACOREAPI void BNRegisterGenericDataRenderer(BNDataRendererContainer* container, BNDataRenderer* renderer); @@ -7682,6 +7849,66 @@ extern "C" BINARYNINJACOREAPI bool BNAnalysisMergeConflictSplitterCanSplit(BNAnalysisMergeConflictSplitter* splitter, const char* key, BNAnalysisMergeConflict* conflict); BINARYNINJACOREAPI bool BNAnalysisMergeConflictSplitterSplit(BNAnalysisMergeConflictSplitter* splitter, const char* originalKey, BNAnalysisMergeConflict* originalConflict, BNKeyValueStore* result, char*** newKeys, BNAnalysisMergeConflict*** newConflicts, size_t* newCount); + // High level token emitter + BINARYNINJACOREAPI BNHighLevelILTokenEmitter* BNNewHighLevelILTokenEmitterReference(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNFreeHighLevelILTokenEmitter(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterAppend(BNHighLevelILTokenEmitter* emitter, BNInstructionTextToken* token); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterNewLine(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterIncreaseIndent(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterDecreaseIndent(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterScopeSeparator(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterBeginScope(BNHighLevelILTokenEmitter* emitter, BNScopeType type); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterEndScope(BNHighLevelILTokenEmitter* emitter, BNScopeType type); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterScopeContinuation(BNHighLevelILTokenEmitter* emitter, bool forceSameLine); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterFinalizeScope(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterNoIndentForThisLine(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterBeginForceZeroConfidence(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterEndForceZeroConfidence(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI BNTokenEmitterExpr BNHighLevelILTokenEmitterSetCurrentExpr(BNHighLevelILTokenEmitter* emitter, BNTokenEmitterExpr expr); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterRestoreCurrentExpr(BNHighLevelILTokenEmitter* emitter, BNTokenEmitterExpr expr); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterFinalize(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterAppendOpenParen(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterAppendCloseParen(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterAppendOpenBracket(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterAppendCloseBracket(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterAppendOpenBrace(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterAppendCloseBrace(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterAppendSemicolon(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterSetBraceRequirement( + BNHighLevelILTokenEmitter* emitter, BNBraceRequirement required); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterSetBracesAroundSwitchCases(BNHighLevelILTokenEmitter* emitter, bool braces); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterSetDefaultBracesOnSameLine(BNHighLevelILTokenEmitter* emitter, bool sameLine); + BINARYNINJACOREAPI void BNHighLevelILTokenEmitterSetSimpleScopeAllowed(BNHighLevelILTokenEmitter* emitter, bool allowed); + BINARYNINJACOREAPI BNBraceRequirement BNHighLevelILTokenEmitterGetBraceRequirement( + BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI bool BNHighLevelILTokenEmitterHasBracesAroundSwitchCases(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI bool BNHighLevelILTokenEmitterGetDefaultBracesOnSameLine(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI bool BNHighLevelILTokenEmitterIsSimpleScopeAllowed(BNHighLevelILTokenEmitter* emitter); + BINARYNINJACOREAPI BNInstructionTextToken* BNHighLevelILTokenEmitterGetCurrentTokens(BNHighLevelILTokenEmitter* emitter, size_t* tokenCount); + BINARYNINJACOREAPI BNDisassemblyTextLine* BNHighLevelILTokenEmitterGetLines(BNHighLevelILTokenEmitter* emitter, size_t* count); + + BINARYNINJACOREAPI void BNAddHighLevelILSizeToken(size_t size, BNInstructionTextTokenType type, BNHighLevelILTokenEmitter* tokens); + BINARYNINJACOREAPI void BNAddHighLevelILFloatSizeToken(size_t size, BNInstructionTextTokenType type, BNHighLevelILTokenEmitter* tokens); + BINARYNINJACOREAPI void BNAddHighLevelILVarTextToken(BNHighLevelILFunction* func, const BNVariable* var, + BNHighLevelILTokenEmitter* tokens, size_t exprIndex, size_t size); + BINARYNINJACOREAPI void BNAddHighLevelILIntegerTextToken(BNHighLevelILFunction* func, size_t exprIndex, + int64_t val, size_t size, BNHighLevelILTokenEmitter* tokens); + BINARYNINJACOREAPI void BNAddHighLevelILArrayIndexToken(BNHighLevelILFunction* func, size_t exprIndex, int64_t val, + size_t size, BNHighLevelILTokenEmitter* tokens, uint64_t address); + BINARYNINJACOREAPI BNSymbolDisplayResult BNAddHighLevelILPointerTextToken(BNHighLevelILFunction* func, + size_t exprIndex, int64_t val, BNHighLevelILTokenEmitter* tokens, BNDisassemblySettings* settings, + BNSymbolDisplayType symbolDisplay, BNOperatorPrecedence precedence, bool allowShortString); + BINARYNINJACOREAPI void BNAddHighLevelILConstantTextToken(BNHighLevelILFunction* func, size_t exprIndex, + int64_t val, size_t size, BNHighLevelILTokenEmitter* tokens, BNDisassemblySettings* settings, + BNOperatorPrecedence precedence); + BINARYNINJACOREAPI char** BNAddNamesForOuterStructureMembers(BNBinaryView* data, BNType* type, + BNHighLevelILFunction* hlil, size_t varExpr, size_t* nameCount); + + BINARYNINJACOREAPI int64_t BNZeroExtend(int64_t value, size_t sourceSize, size_t destSize); + BINARYNINJACOREAPI int64_t BNSignExtend(int64_t value, size_t sourceSize, size_t destSize); + BINARYNINJACOREAPI int64_t BNMaskToSize(int64_t value, size_t size); + BINARYNINJACOREAPI int64_t BNGetMaskForSize(size_t size); + #ifdef __cplusplus } #endif |
