diff options
Diffstat (limited to 'binaryninjacore.h')
| -rw-r--r-- | binaryninjacore.h | 240 |
1 files changed, 207 insertions, 33 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h index 8a970276..fd356b41 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 168 +#define BN_CURRENT_CORE_ABI_VERSION 169 // 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 168 +#define BN_MINIMUM_CORE_ABI_VERSION 169 #ifdef __GNUC__ #ifdef BINARYNINJACORE_LIBRARY @@ -506,6 +506,7 @@ extern "C" BaseStructureNameToken = 37, BaseStructureSeparatorToken = 38, BraceToken = 39, + ValueLocationToken = 40, // The following are output by the analysis system automatically, these should // not be used directly by the architecture plugins CodeSymbolToken = 64, @@ -1154,6 +1155,9 @@ extern "C" // Cue for use-def heuristics to follow through simple copies (e.g., register windowing for Xtensa) ILTransparentCopy = 0x1000, + + // Instruction is defining an implicit trait of the calling convention + MLILCallingConventionImplicit = 0x2000 }; BN_ENUM(uint8_t, BNIntrinsicClass) @@ -1239,6 +1243,8 @@ extern "C" StackFrameOffset, ReturnAddressValue, ImportedAddressValue, + ResultPointerValue, + ParameterPointerValue, // The following are only valid in BNPossibleValueSet SignedRangeValue, @@ -1383,6 +1389,8 @@ extern "C" MLIL_VAR_SPLIT, // Not valid in SSA form (see MLIL_VAR_SPLIT_SSA) MLIL_ADDRESS_OF, MLIL_ADDRESS_OF_FIELD, + MLIL_PASS_BY_REF, + MLIL_RETURN_BY_REF, MLIL_CONST, MLIL_CONST_DATA, MLIL_CONST_PTR, @@ -1430,6 +1438,8 @@ extern "C" MLIL_SHARED_PARAM_SLOT, // Only valid within the MLIL_CALL_PARAM, MLIL_CALL_PARAM_SSA, or // MLIL_SEPARATE_PARAM_LIST instructions inside untyped call variants MLIL_VAR_OUTPUT, // Only valid within MLIL_CALL, MLIL_SYSCALL, MLIL_TAILCALL family instructions + MLIL_VAR_OUTPUT_FIELD, // Only valid within MLIL_CALL, MLIL_SYSCALL, MLIL_TAILCALL family instructions + MLIL_STORE_OUTPUT, // Only valid within MLIL_CALL, MLIL_SYSCALL, MLIL_TAILCALL family instructions MLIL_RET, MLIL_NORET, MLIL_IF, @@ -1507,6 +1517,9 @@ extern "C" MLIL_CALL_OUTPUT_SSA, // Only valid within the MLIL_CALL_SSA or MLIL_SYSCALL_SSA, MLIL_TAILCALL_SSA family // instructions MLIL_VAR_OUTPUT_SSA, // Only valid within the MLIL_CALL_OUTPUT_SSA instruction + MLIL_VAR_OUTPUT_SSA_FIELD, // Only valid within the MLIL_CALL_OUTPUT_SSA instruction + MLIL_VAR_OUTPUT_ALIASED, // Only valid within the MLIL_CALL_OUTPUT_SSA instruction + MLIL_VAR_OUTPUT_ALIASED_FIELD, // Only valid within the MLIL_CALL_OUTPUT_SSA instruction MLIL_MEMORY_INTRINSIC_OUTPUT_SSA, // Only valid within the MLIL_MEMORY_INTRINSIC_SSA instruction MLIL_LOAD_SSA, MLIL_LOAD_STRUCT_SSA, @@ -1516,7 +1529,9 @@ extern "C" MLIL_MEMORY_INTRINSIC_SSA, MLIL_FREE_VAR_SLOT_SSA, MLIL_VAR_PHI, - MLIL_MEM_PHI + MLIL_MEM_PHI, + + MLIL_BLOCK_TO_EXPAND // Must be expanded by a future workflow step, used temporarily to insert instructions }; typedef struct BNMediumLevelILInstruction @@ -1540,7 +1555,9 @@ extern "C" { StackVariableSourceType, RegisterVariableSourceType, - FlagVariableSourceType + FlagVariableSourceType, + CompositeReturnValueSourceType, + CompositeParameterSourceType }; typedef struct BNVariable @@ -1582,6 +1599,8 @@ extern "C" HLIL_DEREF, HLIL_DEREF_FIELD, HLIL_ADDRESS_OF, + HLIL_PASS_BY_REF, + HLIL_RETURN_BY_REF, HLIL_CONST, HLIL_CONST_DATA, HLIL_CONST_PTR, @@ -2626,15 +2645,74 @@ extern "C" uint8_t confidence; } BNRegisterSetWithConfidence; + typedef struct BNValueLocationComponent + { + BNVariable variable; + int64_t offset; + bool sizeValid; + uint64_t size; + } BNValueLocationComponent; + + typedef struct BNValueLocation + { + size_t count; + BNValueLocationComponent* components; + bool indirect; + bool returnedPointerValid; + BNVariable returnedPointer; + } BNValueLocation; + + typedef struct BNValueLocationWithConfidence + { + BNValueLocation location; + uint8_t confidence; + } BNValueLocationWithConfidence; + + typedef struct BNValueLocationListWithConfidence + { + BNValueLocation* locations; + size_t count; + uint8_t confidence; + } BNValueLocationListWithConfidence; + + BN_ENUM(uint8_t, BNValueLocationSource) + { + DefaultLocationSource, + PassByValueLocationSource, + PassByReferenceLocationSource, + CustomLocationSource + }; + typedef struct BNFunctionParameter { char* name; BNType* type; uint8_t typeConfidence; - bool defaultLocation; - BNVariable location; + BNValueLocationSource locationSource; + BNValueLocation location; } BNFunctionParameter; + typedef struct BNReturnValue + { + BNType* type; + uint8_t typeConfidence; + bool defaultLocation; + BNValueLocation location; + uint8_t locationConfidence; + } BNReturnValue; + + typedef struct BNCallLayout + { + BNValueLocation* parameters; + size_t parameterCount; + bool returnValueValid; + BNValueLocation returnValue; + int64_t stackAdjustment; + uint32_t* registerStackAdjustmentRegisters; + int32_t* registerStackAdjustmentAmounts; + size_t registerStackAdjustmentCount; + } BNCallLayout; + typedef struct BNQualifiedNameAndType { BNQualifiedName name; @@ -2881,12 +2959,37 @@ extern "C" void (*getIncomingRegisterValue)(void* ctxt, uint32_t reg, BNFunction* func, BNRegisterValue* result); void (*getIncomingFlagValue)(void* ctxt, uint32_t flag, BNFunction* func, BNRegisterValue* result); + bool (*isReturnTypeRegisterCompatible)(void* ctxt, BNBinaryView* view, BNType* type); + void (*getIndirectReturnValueLocation)(void* ctxt, BNVariable* outVar); + bool (*getReturnedIndirectReturnValuePointer)(void* ctxt, BNVariable* outVar); + + bool (*isArgumentTypeRegisterCompatible)(void* ctxt, BNBinaryView* view, BNType* type); + bool (*isNonRegisterArgumentIndirect)(void* ctxt, BNBinaryView* view, BNType* type); + bool (*areStackArgumentsNaturallyAligned)(void* ctxt); + void (*getIncomingVariableForParameterVariable)( void* ctxt, const BNVariable* var, BNFunction* func, BNVariable* result); void (*getParameterVariableForIncomingVariable)( void* ctxt, const BNVariable* var, BNFunction* func, BNVariable* result); bool (*areArgumentRegistersUsedForVarArgs)(void* ctxt); + + void (*getCallLayout)(void* ctxt, BNBinaryView* view, BNReturnValue* returnValue, BNFunctionParameter* params, + size_t paramCount, bool hasPermittedRegs, uint32_t* permittedRegs, size_t permittedRegCount, + BNCallLayout* result); + void (*freeCallLayout)(void* ctxt, BNCallLayout* layout); + void (*getReturnValueLocation)( + void* ctxt, BNBinaryView* view, BNReturnValue* returnValue, BNValueLocation* outLocation); + void (*freeValueLocation)(void* ctxt, BNValueLocation* location); + BNValueLocation* (*getParameterLocations)(void* ctxt, BNBinaryView* view, BNValueLocation* returnValue, + BNFunctionParameter* params, size_t paramCount, bool hasPermittedRegs, uint32_t* permittedRegs, + size_t permittedRegCount, size_t* outLocationCount); + void (*freeParameterLocations)(void* ctxt, BNValueLocation* locations, size_t count); + int64_t (*getStackAdjustmentForLocations)(void* ctxt, BNBinaryView* view, BNValueLocation* returnValue, + BNValueLocation* locations, BNType** types, size_t paramCount); + size_t (*getRegisterStackAdjustments)(void* ctxt, BNBinaryView* view, BNValueLocation* returnValue, + BNValueLocation* params, size_t paramCount, uint32_t** outRegs, int32_t** outAdjust); + void (*freeRegisterStackAdjustments)(void* ctxt, uint32_t* regs, int32_t* adjust, size_t count); } BNCustomCallingConvention; typedef struct BNVariableNameAndType @@ -5273,10 +5376,19 @@ extern "C" BINARYNINJACOREAPI BNType* BNGetFunctionType(BNFunction* func); BINARYNINJACOREAPI BNTypeWithConfidence BNGetFunctionReturnType(BNFunction* func); + BINARYNINJACOREAPI BNReturnValue BNGetFunctionReturnValue(BNFunction* func); + BINARYNINJACOREAPI void BNFreeReturnValue(BNReturnValue* ret); + BINARYNINJACOREAPI bool BNIsFunctionReturnValueDefaultLocation(BNFunction* func); + BINARYNINJACOREAPI BNValueLocationWithConfidence BNGetFunctionReturnValueLocation(BNFunction* func); BINARYNINJACOREAPI BNRegisterSetWithConfidence BNGetFunctionReturnRegisters(BNFunction* func); BINARYNINJACOREAPI BNCallingConventionWithConfidence BNGetFunctionCallingConvention(BNFunction* func); BINARYNINJACOREAPI BNParameterVariablesWithConfidence BNGetFunctionParameterVariables(BNFunction* func); BINARYNINJACOREAPI void BNFreeParameterVariables(BNParameterVariablesWithConfidence* vars); + BINARYNINJACOREAPI BNValueLocationListWithConfidence BNGetFunctionParameterLocations(BNFunction* func); + BINARYNINJACOREAPI void BNFreeParameterLocations(BNValueLocationListWithConfidence* locations); + BINARYNINJACOREAPI bool BNGetValueLocationVariableForReturnValue(const BNValueLocation* location, BNVariable* var); + BINARYNINJACOREAPI bool BNGetValueLocationVariableForParameter( + const BNValueLocation* location, BNVariable* var, size_t idx); BINARYNINJACOREAPI BNBoolWithConfidence BNFunctionHasVariableArguments(BNFunction* func); BINARYNINJACOREAPI BNOffsetWithConfidence BNGetFunctionStackAdjustment(BNFunction* func); BINARYNINJACOREAPI BNRegisterStackAdjustment* BNGetFunctionRegisterStackAdjustments( @@ -5286,11 +5398,14 @@ extern "C" BINARYNINJACOREAPI void BNFreeRegisterSet(BNRegisterSetWithConfidence* regs); BINARYNINJACOREAPI void BNSetAutoFunctionReturnType(BNFunction* func, BNTypeWithConfidence* type); - BINARYNINJACOREAPI void BNSetAutoFunctionReturnRegisters(BNFunction* func, BNRegisterSetWithConfidence* regs); + BINARYNINJACOREAPI void BNSetAutoIsFunctionReturnValueDefaultLocation(BNFunction* func, bool defaultLocation); + BINARYNINJACOREAPI void BNSetAutoFunctionReturnValueLocation( + BNFunction* func, BNValueLocationWithConfidence* location); + BINARYNINJACOREAPI void BNSetAutoFunctionReturnValue(BNFunction* func, BNReturnValue* returnValue); BINARYNINJACOREAPI void BNSetAutoFunctionCallingConvention( BNFunction* func, BNCallingConventionWithConfidence* convention); - BINARYNINJACOREAPI void BNSetAutoFunctionParameterVariables( - BNFunction* func, BNParameterVariablesWithConfidence* vars); + BINARYNINJACOREAPI void BNSetAutoFunctionParameterLocations( + BNFunction* func, BNValueLocationListWithConfidence* locations); BINARYNINJACOREAPI void BNSetAutoFunctionHasVariableArguments(BNFunction* func, BNBoolWithConfidence* varArgs); BINARYNINJACOREAPI void BNSetAutoFunctionCanReturn(BNFunction* func, BNBoolWithConfidence* returns); BINARYNINJACOREAPI void BNSetAutoFunctionPure(BNFunction* func, BNBoolWithConfidence* pure); @@ -5300,11 +5415,14 @@ extern "C" BINARYNINJACOREAPI void BNSetAutoFunctionClobberedRegisters(BNFunction* func, BNRegisterSetWithConfidence* regs); BINARYNINJACOREAPI void BNSetUserFunctionReturnType(BNFunction* func, BNTypeWithConfidence* type); - BINARYNINJACOREAPI void BNSetUserFunctionReturnRegisters(BNFunction* func, BNRegisterSetWithConfidence* regs); + BINARYNINJACOREAPI void BNSetUserIsFunctionReturnValueDefaultLocation(BNFunction* func, bool defaultLocation); + BINARYNINJACOREAPI void BNSetUserFunctionReturnValueLocation( + BNFunction* func, BNValueLocationWithConfidence* location); + BINARYNINJACOREAPI void BNSetUserFunctionReturnValue(BNFunction* func, BNReturnValue* returnValue); BINARYNINJACOREAPI void BNSetUserFunctionCallingConvention( BNFunction* func, BNCallingConventionWithConfidence* convention); - BINARYNINJACOREAPI void BNSetUserFunctionParameterVariables( - BNFunction* func, BNParameterVariablesWithConfidence* vars); + BINARYNINJACOREAPI void BNSetUserFunctionParameterLocations( + BNFunction* func, BNValueLocationListWithConfidence* locations); BINARYNINJACOREAPI void BNSetUserFunctionHasVariableArguments(BNFunction* func, BNBoolWithConfidence* varArgs); BINARYNINJACOREAPI void BNSetUserFunctionCanReturn(BNFunction* func, BNBoolWithConfidence* returns); BINARYNINJACOREAPI void BNSetUserFunctionPure(BNFunction* func, BNBoolWithConfidence* pure); @@ -7047,11 +7165,11 @@ extern "C" uint64_t originalFragmentOffsetBytes, size_t originalFragmentWidthBytes, BNEndianness endianness, size_t fragmentStartBit, size_t fragmentWidthBits, size_t fragmentTruncatedStartBits, size_t wrapBit); BINARYNINJACOREAPI BNType* BNCreateArrayType(const BNTypeWithConfidence* const type, uint64_t elem); - BINARYNINJACOREAPI BNType* BNCreateFunctionType(BNTypeWithConfidence* returnValue, BNCallingConventionWithConfidence* callingConvention, - BNFunctionParameter* params, size_t paramCount, BNBoolWithConfidence* varArg, - BNBoolWithConfidence* canReturn, BNOffsetWithConfidence* stackAdjust, - uint32_t* regStackAdjustRegs, BNOffsetWithConfidence* regStackAdjustValues, size_t regStackAdjustCount, - BNRegisterSetWithConfidence* returnRegs, BNNameType ft, BNBoolWithConfidence* pure); + BINARYNINJACOREAPI BNType* BNCreateFunctionType(BNReturnValue* returnValue, + BNCallingConventionWithConfidence* callingConvention, BNFunctionParameter* params, size_t paramCount, + BNBoolWithConfidence* varArg, BNBoolWithConfidence* canReturn, BNOffsetWithConfidence* stackAdjust, + uint32_t* regStackAdjustRegs, BNOffsetWithConfidence* regStackAdjustValues, size_t regStackAdjustCount, + BNNameType ft, BNBoolWithConfidence* pure); BINARYNINJACOREAPI BNType* BNCreateVarArgsType(); BINARYNINJACOREAPI BNType* BNCreateValueType(const char* value); BINARYNINJACOREAPI char* BNGetNameTypeString(BNNameType classFunctionType); @@ -7087,11 +7205,11 @@ extern "C" uint64_t originalFragmentOffsetBytes, size_t originalFragmentWidthBytes, BNEndianness endianness, size_t fragmentStartBit, size_t fragmentWidthBits, size_t fragmentTruncatedStartBits, size_t wrapBit); BINARYNINJACOREAPI BNTypeBuilder* BNCreateArrayTypeBuilder(const BNTypeWithConfidence* const type, uint64_t elem); - BINARYNINJACOREAPI BNTypeBuilder* BNCreateFunctionTypeBuilder(BNTypeWithConfidence* returnValue, BNCallingConventionWithConfidence* callingConvention, - BNFunctionParameter* params, size_t paramCount, BNBoolWithConfidence* varArg, - BNBoolWithConfidence* canReturn, BNOffsetWithConfidence* stackAdjust, + BINARYNINJACOREAPI BNTypeBuilder* BNCreateFunctionTypeBuilder(BNReturnValue* returnValue, + BNCallingConventionWithConfidence* callingConvention, BNFunctionParameter* params, size_t paramCount, + BNBoolWithConfidence* varArg, BNBoolWithConfidence* canReturn, BNOffsetWithConfidence* stackAdjust, uint32_t* regStackAdjustRegs, BNOffsetWithConfidence* regStackAdjustValues, size_t regStackAdjustCount, - BNRegisterSetWithConfidence* returnRegs, BNNameType ft, BNBoolWithConfidence* pure); + BNNameType ft, BNBoolWithConfidence* pure); BINARYNINJACOREAPI BNTypeBuilder* BNCreateVarArgsTypeBuilder(); BINARYNINJACOREAPI BNTypeBuilder* BNCreateValueTypeBuilder(const char* value); BINARYNINJACOREAPI BNType* BNFinalizeTypeBuilder(BNTypeBuilder* type); @@ -7110,6 +7228,14 @@ extern "C" BINARYNINJACOREAPI BNBoolWithConfidence BNIsTypeVolatile(BNType* type); BINARYNINJACOREAPI bool BNIsTypeFloatingPoint(BNType* type); BINARYNINJACOREAPI BNTypeWithConfidence BNGetChildType(BNType* type); + BINARYNINJACOREAPI BNReturnValue BNGetTypeReturnValue(BNType* type); + BINARYNINJACOREAPI bool BNIsTypeReturnValueDefaultLocation(BNType* type); + BINARYNINJACOREAPI BNValueLocationWithConfidence BNGetTypeReturnValueLocation(BNType* type); + BINARYNINJACOREAPI bool BNParseValueLocation( + const char* str, BNArchitecture* arch, BNValueLocation* location, char** error); + BINARYNINJACOREAPI char* BNValueLocationToString(BNValueLocation* location, BNArchitecture* arch); + BINARYNINJACOREAPI char* BNValueLocationComponentToString(BNValueLocationComponent* component, BNArchitecture* arch); + BINARYNINJACOREAPI void BNFreeValueLocation(BNValueLocation* location); BINARYNINJACOREAPI BNCallingConventionWithConfidence BNGetTypeCallingConvention(BNType* type); BINARYNINJACOREAPI BNCallingConventionName BNGetTypeCallingConventionName(BNType* type); BINARYNINJACOREAPI BNFunctionParameter* BNGetTypeParameters(BNType* type, size_t* count); @@ -7185,6 +7311,9 @@ extern "C" BINARYNINJACOREAPI BNBoolWithConfidence BNIsTypeBuilderVolatile(BNTypeBuilder* type); BINARYNINJACOREAPI bool BNIsTypeBuilderFloatingPoint(BNTypeBuilder* type); BINARYNINJACOREAPI BNTypeWithConfidence BNGetTypeBuilderChildType(BNTypeBuilder* type); + BINARYNINJACOREAPI BNReturnValue BNGetTypeBuilderReturnValue(BNTypeBuilder* type); + BINARYNINJACOREAPI bool BNIsTypeBuilderReturnValueDefaultLocation(BNTypeBuilder* type); + BINARYNINJACOREAPI BNValueLocationWithConfidence BNGetTypeBuilderReturnValueLocation(BNTypeBuilder* type); BINARYNINJACOREAPI BNCallingConventionWithConfidence BNGetTypeBuilderCallingConvention(BNTypeBuilder* type); BINARYNINJACOREAPI BNCallingConventionName BNGetTypeBuilderCallingConventionName(BNTypeBuilder* type); BINARYNINJACOREAPI BNFunctionParameter* BNGetTypeBuilderParameters(BNTypeBuilder* type, size_t* count); @@ -7223,6 +7352,10 @@ extern "C" BINARYNINJACOREAPI void BNTypeBuilderSetVolatile(BNTypeBuilder* type, BNBoolWithConfidence* vltl); BINARYNINJACOREAPI void BNTypeBuilderSetSigned(BNTypeBuilder* type, BNBoolWithConfidence* sign); BINARYNINJACOREAPI void BNTypeBuilderSetChildType(BNTypeBuilder* type, BNTypeWithConfidence* child); + BINARYNINJACOREAPI void BNTypeBuilderSetReturnValue(BNTypeBuilder* type, BNReturnValue* rv); + BINARYNINJACOREAPI void BNTypeBuilderSetIsReturnValueDefaultLocation(BNTypeBuilder* type, bool defaultLocation); + BINARYNINJACOREAPI void BNTypeBuilderSetReturnValueLocation( + BNTypeBuilder* type, BNValueLocationWithConfidence* location); BINARYNINJACOREAPI void BNTypeBuilderSetCallingConvention(BNTypeBuilder* type, BNCallingConventionWithConfidence* cc); BINARYNINJACOREAPI void BNTypeBuilderSetCallingConventionName(BNTypeBuilder* type, BNCallingConventionName cc); BINARYNINJACOREAPI BNOffsetWithConfidence BNGetTypeBuilderStackAdjustment(BNTypeBuilder* type); @@ -7630,21 +7763,51 @@ extern "C" BNCallingConvention* cc, uint32_t reg, BNFunction* func); BINARYNINJACOREAPI BNRegisterValue BNGetIncomingFlagValue(BNCallingConvention* cc, uint32_t reg, BNFunction* func); - BINARYNINJACOREAPI BNVariable* BNGetVariablesForParametersDefaultPermittedArgs( - BNCallingConvention* cc, const BNFunctionParameter* params, size_t paramCount, size_t* count); - BINARYNINJACOREAPI BNVariable* BNGetVariablesForParameters(BNCallingConvention* cc, - const BNFunctionParameter* params, size_t paramCount, const uint32_t* permittedArgs, size_t permittedArgCount, - size_t* count); + BINARYNINJACOREAPI BNCallLayout BNGetCallLayout(BNCallingConvention* cc, BNBinaryView* view, + const BNReturnValue* returnValue, const BNFunctionParameter* params, size_t paramCount, + const uint32_t* permittedRegs, size_t permittedRegCount); + BINARYNINJACOREAPI BNCallLayout BNGetCallLayoutDefaultPermittedArgs(BNCallingConvention* cc, BNBinaryView* view, + const BNReturnValue* returnValue, const BNFunctionParameter* params, size_t paramCount); + BINARYNINJACOREAPI BNCallLayout BNGetDefaultCallLayout(BNCallingConvention* cc, BNBinaryView* view, + const BNReturnValue* returnValue, const BNFunctionParameter* params, size_t paramCount, + const uint32_t* permittedRegs, size_t permittedRegCount); + BINARYNINJACOREAPI BNCallLayout BNGetDefaultCallLayoutDefaultPermittedArgs(BNCallingConvention* cc, + BNBinaryView* view, const BNReturnValue* returnValue, const BNFunctionParameter* params, size_t paramCount); + BINARYNINJACOREAPI void BNFreeCallLayout(BNCallLayout* layout); + BINARYNINJACOREAPI BNValueLocation BNGetReturnValueLocation( + BNCallingConvention* cc, BNBinaryView* view, BNReturnValue* returnValue); + BINARYNINJACOREAPI BNValueLocation BNGetDefaultReturnValueLocation( + BNCallingConvention* cc, BNBinaryView* view, BNReturnValue* returnValue); + BINARYNINJACOREAPI BNValueLocation* BNGetParameterLocations(BNCallingConvention* cc, BNBinaryView* view, + BNValueLocation* returnValue, BNFunctionParameter* params, size_t paramCount, const uint32_t* permittedRegs, + size_t permittedRegCount, size_t* outCount); + BINARYNINJACOREAPI BNValueLocation* BNGetParameterLocationsDefaultPermittedArgs(BNCallingConvention* cc, + BNBinaryView* view, BNValueLocation* returnValue, BNFunctionParameter* params, size_t paramCount, + size_t* outCount); + BINARYNINJACOREAPI BNValueLocation* BNGetDefaultParameterLocations(BNCallingConvention* cc, BNBinaryView* view, + BNValueLocation* returnValue, BNFunctionParameter* params, size_t paramCount, const uint32_t* permittedRegs, + size_t permittedRegCount, size_t* outCount); + BINARYNINJACOREAPI BNValueLocation* BNGetDefaultParameterLocationsDefaultPermittedArgs(BNCallingConvention* cc, + BNBinaryView* view, BNValueLocation* returnValue, BNFunctionParameter* params, size_t paramCount, + size_t* outCount); + BINARYNINJACOREAPI void BNFreeValueLocationList(BNValueLocation* locations, size_t count); + BINARYNINJACOREAPI BNVariable* BNGetParameterOrderingForVariables( BNCallingConvention* cc, const BNVariable* paramVars, const BNType** paramTypes, size_t paramCount, size_t* count); - BINARYNINJACOREAPI int64_t BNGetStackAdjustmentForVariables( - BNCallingConvention* cc, const BNVariable* paramVars, const BNType** paramTypes, - size_t paramCount); - BINARYNINJACOREAPI size_t BNGetRegisterStackAdjustments( - BNCallingConvention* cc, const uint32_t* returnRegs, size_t returnRegCount, BNType* returnType, - const BNVariable* params, size_t paramCount, const BNType** types, size_t typeCount, - uint32_t** resultRegisters, uint32_t** resultAdjustments); + BINARYNINJACOREAPI int64_t BNGetStackAdjustmentForLocations(BNCallingConvention* cc, BNBinaryView* view, + BNValueLocation* returnValue, const BNValueLocation* paramLocations, const BNType** paramTypes, + size_t paramCount); + BINARYNINJACOREAPI int64_t BNGetDefaultStackAdjustmentForLocations(BNCallingConvention* cc, + BNValueLocation* returnValue, const BNValueLocation* paramLocations, const BNType** paramTypes, + size_t paramCount); + BINARYNINJACOREAPI size_t BNGetCallingConventionRegisterStackAdjustments(BNCallingConvention* cc, + BNBinaryView* view, BNValueLocation* returnValue, BNValueLocation* params, size_t paramCount, + uint32_t** outRegs, int32_t** outAdjust); + BINARYNINJACOREAPI size_t BNGetCallingConventionDefaultRegisterStackAdjustments(BNCallingConvention* cc, + BNValueLocation* returnValue, BNValueLocation* params, size_t paramCount, uint32_t** outRegs, + int32_t** outAdjust); + BINARYNINJACOREAPI void BNFreeCallingConventionRegisterStackAdjustments(uint32_t* regs, int32_t* adjust); BINARYNINJACOREAPI BNVariable BNGetIncomingVariableForParameterVariable( BNCallingConvention* cc, const BNVariable* var, BNFunction* func); @@ -7655,6 +7818,17 @@ extern "C" BINARYNINJACOREAPI BNVariable BNGetDefaultParameterVariableForIncomingVariable( BNCallingConvention* cc, const BNVariable* var); + BINARYNINJACOREAPI bool BNIsReturnTypeRegisterCompatible(BNCallingConvention* cc, BNBinaryView* view, BNType* type); + BINARYNINJACOREAPI bool BNDefaultIsReturnTypeRegisterCompatible(BNCallingConvention* cc, BNType* type); + BINARYNINJACOREAPI BNVariable BNGetIndirectReturnValueLocation(BNCallingConvention* cc); + BINARYNINJACOREAPI BNVariable BNGetDefaultIndirectReturnValueLocation(BNCallingConvention* cc); + BINARYNINJACOREAPI bool BNGetReturnedIndirectReturnValuePointer(BNCallingConvention* cc, BNVariable* outVar); + BINARYNINJACOREAPI bool BNIsArgumentTypeRegisterCompatible( + BNCallingConvention* cc, BNBinaryView* view, BNType* type); + BINARYNINJACOREAPI bool BNDefaultIsArgumentTypeRegisterCompatible(BNCallingConvention* cc, BNType* type); + BINARYNINJACOREAPI bool BNIsNonRegisterArgumentIndirect(BNCallingConvention* cc, BNBinaryView* view, BNType* type); + BINARYNINJACOREAPI bool BNAreStackArgumentsNaturallyAligned(BNCallingConvention* cc); + BINARYNINJACOREAPI BNCallingConvention* BNGetArchitectureDefaultCallingConvention(BNArchitecture* arch); BINARYNINJACOREAPI BNCallingConvention* BNGetArchitectureCdeclCallingConvention(BNArchitecture* arch); BINARYNINJACOREAPI BNCallingConvention* BNGetArchitectureStdcallCallingConvention(BNArchitecture* arch); |
