summaryrefslogtreecommitdiff
path: root/binaryninjacore.h
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2017-03-05 13:12:01 -0500
committerPeter LaFosse <peter@vector35.com>2017-03-05 13:12:01 -0500
commitcf5997848b8819725315bd2c8dd8a04c70da3b63 (patch)
tree24d9360e3ccfaee361aca4d345072c142c386a41 /binaryninjacore.h
parenta0132eed82d28d4408a2475847e1804a157b3dc1 (diff)
parent27f1271083efb09efc6405f91be893ab38dad9a0 (diff)
Merginging with dev
Diffstat (limited to 'binaryninjacore.h')
-rw-r--r--binaryninjacore.h223
1 files changed, 168 insertions, 55 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 44ae666b..e916124b 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -69,6 +69,24 @@
#define BN_DEFAULT_MIN_STRING_LENGTH 4
#define BN_MAX_STRING_LENGTH 128
+#define LLVM_SVCS_CB_NOTE 0
+#define LLVM_SVCS_CB_WARNING 1
+#define LLVM_SVCS_CB_ERROR 2
+
+#define LLVM_SVCS_DIALECT_UNSPEC 0
+#define LLVM_SVCS_DIALECT_ATT 1
+#define LLVM_SVCS_DIALECT_INTEL 2
+
+#define LLVM_SVCS_CM_DEFAULT 0
+#define LLVM_SVCS_CM_SMALL 1
+#define LLVM_SVCS_CM_KERNEL 2
+#define LLVM_SVCS_CM_MEDIUM 3
+#define LLVM_SVCS_CM_LARGE 4
+
+#define LLVM_SVCS_RM_STATIC 0
+#define LLVM_SVCS_RM_PIC 1
+#define LLVM_SVCS_RM_DYNAMIC_NO_PIC 2
+
#ifdef __cplusplus
extern "C"
{
@@ -100,7 +118,7 @@ extern "C"
struct BNLowLevelILFunction;
struct BNType;
struct BNStructure;
- struct BNUnknownType;
+ struct BNNamedTypeReference;
struct BNEnumeration;
struct BNCallingConvention;
struct BNPlatform;
@@ -177,19 +195,17 @@ extern "C"
FloatingPointToken = 8,
AnnotationToken = 9,
CodeRelativeAddressToken = 10,
- StackVariableTypeToken = 11,
- DataVariableTypeToken = 12,
- FunctionReturnTypeToken = 13,
- FunctionAttributeToken = 14,
- ArgumentTypeToken = 15,
- ArgumentNameToken = 16,
- HexDumpByteValueToken = 17,
- HexDumpSkippedByteToken = 18,
- HexDumpInvalidByteToken = 19,
- HexDumpTextToken = 20,
- OpcodeToken = 21,
- StringToken = 22,
- CharacterConstantToken = 23,
+ ArgumentNameToken = 11,
+ HexDumpByteValueToken = 12,
+ HexDumpSkippedByteToken = 13,
+ HexDumpInvalidByteToken = 14,
+ HexDumpTextToken = 15,
+ OpcodeToken = 16,
+ StringToken = 17,
+ CharacterConstantToken = 18,
+ KeywordToken = 19,
+ TypeNameToken = 20,
+ FieldNameToken = 21,
// The following are output by the analysis system automatically, these should
// not be used directly by the architecture plugins
@@ -200,6 +216,15 @@ extern "C"
AddressDisplayToken = 68
};
+ enum BNInstructionTextTokenContext
+ {
+ NoTokenContext = 0,
+ StackVariableTokenContext = 1,
+ DataVariableTokenContext = 2,
+ FunctionReturnTokenContext = 3,
+ ArgumentTokenContext = 4
+ };
+
enum BNLinearDisassemblyLineType
{
BlankLineType,
@@ -375,7 +400,17 @@ extern "C"
FunctionTypeClass = 8,
VarArgsTypeClass = 9,
ValueTypeClass = 10,
- UnknownTypeClass = 11
+ NamedTypeReferenceClass = 11
+ };
+
+ enum BNNamedTypeReferenceClass
+ {
+ UnknownNamedTypeClass = 0,
+ TypedefNamedTypeClass = 1,
+ ClassNamedTypeClass = 2,
+ StructNamedTypeClass = 3,
+ UnionNamedTypeClass = 4,
+ EnumNamedTypeClass = 5
};
enum BNStructureType
@@ -646,6 +681,12 @@ extern "C"
bool (*navigate)(void* ctxt, const char* view, uint64_t offset);
};
+ struct BNQualifiedName
+ {
+ char** name;
+ size_t nameCount;
+ };
+
struct BNBinaryDataNotification
{
void* context;
@@ -660,6 +701,8 @@ extern "C"
void (*dataVariableUpdated)(void* ctxt, BNBinaryView* view, BNDataVariable* var);
void (*stringFound)(void* ctxt, BNBinaryView* view, BNStringType type, uint64_t offset, size_t len);
void (*stringRemoved)(void* ctxt, BNBinaryView* view, BNStringType type, uint64_t offset, size_t len);
+ void (*typeDefined)(void* ctxt, BNBinaryView* view, BNQualifiedName* name, BNType* type);
+ void (*typeUndefined)(void* ctxt, BNBinaryView* view, BNQualifiedName* name, BNType* type);
};
struct BNFileAccessor
@@ -740,6 +783,8 @@ extern "C"
char* text;
uint64_t value;
size_t size, operand;
+ BNInstructionTextTokenContext context;
+ uint64_t address;
};
struct BNInstructionTextLine
@@ -798,8 +843,7 @@ extern "C"
struct BNBasicBlockEdge
{
BNBranchType type;
- uint64_t target;
- BNArchitecture* arch;
+ BNBasicBlock* target;
};
struct BNPoint
@@ -811,8 +855,7 @@ extern "C"
struct BNFunctionGraphEdge
{
BNBranchType type;
- uint64_t target;
- BNArchitecture* arch;
+ BNBasicBlock* target;
BNPoint* points;
size_t pointCount;
};
@@ -863,6 +906,12 @@ extern "C"
BNType* type;
};
+ struct BNQualifiedNameAndType
+ {
+ BNQualifiedName name;
+ BNType* type;
+ };
+
struct BNStructureMember
{
BNType* type;
@@ -885,9 +934,9 @@ extern "C"
struct BNTypeParserResult
{
- BNNameAndType* types;
- BNNameAndType* variables;
- BNNameAndType* functions;
+ BNQualifiedNameAndType* types;
+ BNQualifiedNameAndType* variables;
+ BNQualifiedNameAndType* functions;
size_t typeCount, variableCount, functionCount;
};
@@ -1219,10 +1268,11 @@ extern "C"
uint64_t end;
};
- struct BNRepositoryManifest
+ struct BNSystemCallInfo
{
- const char* ManifestFile;
- const char* RepoDirectory;
+ uint32_t number;
+ BNQualifiedName name;
+ BNType* type;
};
BINARYNINJACOREAPI char* BNAllocString(const char* contents);
@@ -1235,20 +1285,26 @@ extern "C"
BINARYNINJACOREAPI uint32_t BNGetBuildId(void);
BINARYNINJACOREAPI bool BNIsLicenseValidated(void);
+ BINARYNINJACOREAPI char* BNGetProduct(void);
+ BINARYNINJACOREAPI char* BNGetProductType(void);
+ BINARYNINJACOREAPI int BNGetLicenseCount(void);
BINARYNINJACOREAPI void BNRegisterObjectDestructionCallbacks(BNObjectDestructionCallbacks* callbacks);
BINARYNINJACOREAPI void BNUnregisterObjectDestructionCallbacks(BNObjectDestructionCallbacks* callbacks);
+ BINARYNINJACOREAPI char* BNGetUniqueIdentifierString(void);
+
// Plugin initialization
BINARYNINJACOREAPI void BNInitCorePlugins(void);
BINARYNINJACOREAPI void BNInitUserPlugins(void);
- BINARYNINJACOREAPI void BNInitRepoPlugins(void);
-
+ BINARYNINJACOREAPI char* BNGetInstallDirectory(void);
BINARYNINJACOREAPI char* BNGetBundledPluginDirectory(void);
BINARYNINJACOREAPI void BNSetBundledPluginDirectory(const char* path);
- BINARYNINJACOREAPI char* BNGetUserPluginDirectory(void);
BINARYNINJACOREAPI char* BNGetUserDirectory(void);
- BINARYNINJACOREAPI char* BNGetRepositoriesDirectory(void);
+ BINARYNINJACOREAPI char* BNGetUserPluginDirectory(void);
+
+ BINARYNINJACOREAPI void BNSaveLastRun(void);
+
BINARYNINJACOREAPI char* BNGetPathRelativeToBundledPluginDirectory(const char* path);
BINARYNINJACOREAPI char* BNGetPathRelativeToUserPluginDirectory(const char* path);
@@ -1428,6 +1484,7 @@ extern "C"
BINARYNINJACOREAPI BNSegment* BNGetSegments(BNBinaryView* view, size_t* count);
BINARYNINJACOREAPI void BNFreeSegmentList(BNSegment* segments);
BINARYNINJACOREAPI bool BNGetSegmentAt(BNBinaryView* view, uint64_t addr, BNSegment* result);
+ BINARYNINJACOREAPI bool BNGetAddressForDataOffset(BNBinaryView* view, uint64_t offset, uint64_t* addr);
BINARYNINJACOREAPI void BNAddAutoSection(BNBinaryView* view, const char* name, uint64_t start, uint64_t length,
const char* type, uint64_t align, uint64_t entrySize, const char* linkedSection, const char* infoSection,
@@ -1721,8 +1778,17 @@ extern "C"
BINARYNINJACOREAPI uint64_t BNGetBasicBlockEnd(BNBasicBlock* block);
BINARYNINJACOREAPI uint64_t BNGetBasicBlockLength(BNBasicBlock* block);
BINARYNINJACOREAPI BNBasicBlockEdge* BNGetBasicBlockOutgoingEdges(BNBasicBlock* block, size_t* count);
- BINARYNINJACOREAPI void BNFreeBasicBlockOutgoingEdgeList(BNBasicBlockEdge* edges);
+ BINARYNINJACOREAPI BNBasicBlockEdge* BNGetBasicBlockIncomingEdges(BNBasicBlock* block, size_t* count);
+ BINARYNINJACOREAPI void BNFreeBasicBlockEdgeList(BNBasicBlockEdge* edges, size_t count);
BINARYNINJACOREAPI bool BNBasicBlockHasUndeterminedOutgoingEdges(BNBasicBlock* block);
+ BINARYNINJACOREAPI size_t BNGetBasicBlockIndex(BNBasicBlock* block);
+ BINARYNINJACOREAPI BNBasicBlock** BNGetBasicBlockDominators(BNBasicBlock* block, size_t* count);
+ BINARYNINJACOREAPI BNBasicBlock** BNGetBasicBlockStrictDominators(BNBasicBlock* block, size_t* count);
+ BINARYNINJACOREAPI BNBasicBlock* BNGetBasicBlockImmediateDominator(BNBasicBlock* block);
+ BINARYNINJACOREAPI BNBasicBlock** BNGetBasicBlockDominatorTreeChildren(BNBasicBlock* block, size_t* count);
+ BINARYNINJACOREAPI BNBasicBlock** BNGetBasicBlockDominanceFrontier(BNBasicBlock* block, size_t* count);
+ BINARYNINJACOREAPI BNBasicBlock** BNGetBasicBlockIteratedDominanceFrontier(BNBasicBlock** blocks,
+ size_t incomingCount, size_t* outputCount);
BINARYNINJACOREAPI BNDisassemblyTextLine* BNGetBasicBlockDisassemblyText(BNBasicBlock* block,
BNDisassemblySettings* settings, size_t* count);
@@ -1806,17 +1872,31 @@ extern "C"
BINARYNINJACOREAPI void BNFreeDataVariables(BNDataVariable* vars, size_t count);
BINARYNINJACOREAPI bool BNGetDataVariableAtAddress(BNBinaryView* view, uint64_t addr, BNDataVariable* var);
- BINARYNINJACOREAPI bool BNParseTypeString(BNBinaryView* view, const char* text, BNNameAndType* result, char** errors);
+ BINARYNINJACOREAPI bool BNParseTypeString(BNBinaryView* view, const char* text,
+ BNQualifiedNameAndType* result, char** errors);
BINARYNINJACOREAPI void BNFreeNameAndType(BNNameAndType* obj);
+ BINARYNINJACOREAPI void BNFreeQualifiedNameAndType(BNQualifiedNameAndType* obj);
- BINARYNINJACOREAPI BNNameAndType* BNGetAnalysisTypeList(BNBinaryView* view, size_t* count);
- BINARYNINJACOREAPI void BNFreeTypeList(BNNameAndType* types, size_t count);
- BINARYNINJACOREAPI BNType* BNGetAnalysisTypeByName(BNBinaryView* view, const char* name);
- BINARYNINJACOREAPI bool BNIsAnalysisTypeAutoDefined(BNBinaryView* view, const char* name);
- BINARYNINJACOREAPI void BNDefineAnalysisType(BNBinaryView* view, const char* name, BNType* type);
- BINARYNINJACOREAPI void BNDefineUserAnalysisType(BNBinaryView* view, const char* name, BNType* type);
- BINARYNINJACOREAPI void BNUndefineAnalysisType(BNBinaryView* view, const char* name);
- BINARYNINJACOREAPI void BNUndefineUserAnalysisType(BNBinaryView* view, const char* name);
+ BINARYNINJACOREAPI BNQualifiedNameAndType* BNGetAnalysisTypeList(BNBinaryView* view, size_t* count);
+ BINARYNINJACOREAPI void BNFreeTypeList(BNQualifiedNameAndType* types, size_t count);
+ BINARYNINJACOREAPI BNType* BNGetAnalysisTypeByName(BNBinaryView* view, BNQualifiedName* name);
+ BINARYNINJACOREAPI BNType* BNGetAnalysisTypeById(BNBinaryView* view, const char* id);
+ BINARYNINJACOREAPI char* BNGetAnalysisTypeId(BNBinaryView* view, BNQualifiedName* name);
+ BINARYNINJACOREAPI BNQualifiedName BNGetAnalysisTypeNameById(BNBinaryView* view, const char* id);
+ BINARYNINJACOREAPI bool BNIsAnalysisTypeAutoDefined(BNBinaryView* view, BNQualifiedName* name);
+ BINARYNINJACOREAPI BNQualifiedName BNDefineAnalysisType(BNBinaryView* view, const char* id,
+ BNQualifiedName* defaultName, BNType* type);
+ BINARYNINJACOREAPI void BNDefineUserAnalysisType(BNBinaryView* view, BNQualifiedName* name, BNType* type);
+ BINARYNINJACOREAPI void BNUndefineAnalysisType(BNBinaryView* view, const char* id);
+ BINARYNINJACOREAPI void BNUndefineUserAnalysisType(BNBinaryView* view, BNQualifiedName* name);
+ BINARYNINJACOREAPI void BNRenameAnalysisType(BNBinaryView* view, BNQualifiedName* oldName, BNQualifiedName* newName);
+ BINARYNINJACOREAPI char* BNGenerateAutoTypeId(const char* source, BNQualifiedName* name);
+ BINARYNINJACOREAPI char* BNGenerateAutoPlatformTypeId(BNPlatform* platform, BNQualifiedName* name);
+ BINARYNINJACOREAPI char* BNGenerateAutoDemangledTypeId(BNQualifiedName* name);
+ BINARYNINJACOREAPI char* BNGetAutoPlatformTypeIdSource(BNPlatform* platform);
+ BINARYNINJACOREAPI char* BNGetAutoDemangledTypeIdSource(void);
+
+ BINARYNINJACOREAPI void BNRegisterPlatformTypes(BNBinaryView* view, BNPlatform* platform);
BINARYNINJACOREAPI void BNReanalyzeAllFunctions(BNBinaryView* view);
BINARYNINJACOREAPI void BNReanalyzeFunction(BNFunction* func);
@@ -1980,7 +2060,7 @@ extern "C"
BNNameAndType* params, size_t paramCount, bool varArg);
BINARYNINJACOREAPI BNType* BNNewTypeReference(BNType* type);
BINARYNINJACOREAPI BNType* BNDuplicateType(BNType* type);
- BINARYNINJACOREAPI char* BNGetTypeAndName(BNType* type, const char** nameList, size_t nameCount);
+ BINARYNINJACOREAPI char* BNGetTypeAndName(BNType* type, BNQualifiedName* name);
BINARYNINJACOREAPI void BNFreeType(BNType* type);
BINARYNINJACOREAPI BNTypeClass BNGetTypeClass(BNType* type);
@@ -1998,30 +2078,42 @@ extern "C"
BINARYNINJACOREAPI bool BNFunctionTypeCanReturn(BNType* type);
BINARYNINJACOREAPI BNStructure* BNGetTypeStructure(BNType* type);
BINARYNINJACOREAPI BNEnumeration* BNGetTypeEnumeration(BNType* type);
+ BINARYNINJACOREAPI BNNamedTypeReference* BNGetTypeNamedTypeReference(BNType* type);
BINARYNINJACOREAPI uint64_t BNGetTypeElementCount(BNType* type);
BINARYNINJACOREAPI void BNSetFunctionCanReturn(BNType* type, bool canReturn);
BINARYNINJACOREAPI char* BNGetTypeString(BNType* type);
BINARYNINJACOREAPI char* BNGetTypeStringBeforeName(BNType* type);
BINARYNINJACOREAPI char* BNGetTypeStringAfterName(BNType* type);
+ BINARYNINJACOREAPI BNInstructionTextToken* BNGetTypeTokens(BNType* type, size_t* count);
+ BINARYNINJACOREAPI BNInstructionTextToken* BNGetTypeTokensBeforeName(BNType* type, size_t* count);
+ BINARYNINJACOREAPI BNInstructionTextToken* BNGetTypeTokensAfterName(BNType* type, size_t* count);
+ BINARYNINJACOREAPI void BNFreeTokenList(BNInstructionTextToken* tokens, size_t count);
- BINARYNINJACOREAPI BNType* BNCreateUnknownNamedType(BNUnknownType* ut);
- BINARYNINJACOREAPI BNUnknownType* BNCreateUnknownType(void);
- BINARYNINJACOREAPI void BNSetUnknownTypeName(BNUnknownType* ut, const char** name, size_t size);
- BINARYNINJACOREAPI char** BNGetUnknownTypeName(BNUnknownType* ut, size_t* size);
- BINARYNINJACOREAPI void BNFreeUnknownType(BNUnknownType* ut);
- BINARYNINJACOREAPI BNUnknownType* BNNewUnknownTypeReference(BNUnknownType* ut);
+ BINARYNINJACOREAPI BNType* BNCreateNamedTypeReference(BNNamedTypeReference* nt, size_t width, size_t align);
+ BINARYNINJACOREAPI BNType* BNCreateNamedTypeReferenceFromTypeAndId(const char* id, BNQualifiedName* name, BNType* type);
+ BINARYNINJACOREAPI BNType* BNCreateNamedTypeReferenceFromType(BNBinaryView* view, BNQualifiedName* name);
+ BINARYNINJACOREAPI BNNamedTypeReference* BNCreateNamedType(void);
+ BINARYNINJACOREAPI void BNSetTypeReferenceClass(BNNamedTypeReference* nt, BNNamedTypeReferenceClass cls);
+ BINARYNINJACOREAPI BNNamedTypeReferenceClass BNGetTypeReferenceClass(BNNamedTypeReference* nt);
+ BINARYNINJACOREAPI void BNSetTypeReferenceId(BNNamedTypeReference* nt, const char* id);
+ BINARYNINJACOREAPI char* BNGetTypeReferenceId(BNNamedTypeReference* nt);
+ BINARYNINJACOREAPI void BNSetTypeReferenceName(BNNamedTypeReference* nt, BNQualifiedName* name);
+ BINARYNINJACOREAPI BNQualifiedName BNGetTypeReferenceName(BNNamedTypeReference* nt);
+ BINARYNINJACOREAPI void BNFreeQualifiedName(BNQualifiedName* name);
+ BINARYNINJACOREAPI void BNFreeNamedTypeReference(BNNamedTypeReference* nt);
+ BINARYNINJACOREAPI BNNamedTypeReference* BNNewNamedTypeReference(BNNamedTypeReference* nt);
BINARYNINJACOREAPI BNStructure* BNCreateStructure(void);
BINARYNINJACOREAPI BNStructure* BNNewStructureReference(BNStructure* s);
BINARYNINJACOREAPI void BNFreeStructure(BNStructure* s);
- BINARYNINJACOREAPI char** BNGetStructureName(BNStructure* s, size_t* size);
- BINARYNINJACOREAPI void BNSetStructureName(BNStructure* s, const char** names, size_t size);
BINARYNINJACOREAPI BNStructureMember* BNGetStructureMembers(BNStructure* s, size_t* count);
BINARYNINJACOREAPI void BNFreeStructureMemberList(BNStructureMember* members, size_t count);
BINARYNINJACOREAPI uint64_t BNGetStructureWidth(BNStructure* s);
+ BINARYNINJACOREAPI void BNSetStructureWidth(BNStructure* s, uint64_t width);
BINARYNINJACOREAPI size_t BNGetStructureAlignment(BNStructure* s);
+ BINARYNINJACOREAPI void BNSetStructureAlignment(BNStructure* s, size_t align);
BINARYNINJACOREAPI bool BNIsStructurePacked(BNStructure* s);
BINARYNINJACOREAPI void BNSetStructurePacked(BNStructure* s, bool packed);
BINARYNINJACOREAPI bool BNIsStructureUnion(BNStructure* s);
@@ -2030,28 +2122,29 @@ extern "C"
BINARYNINJACOREAPI void BNAddStructureMember(BNStructure* s, BNType* type, const char* name);
BINARYNINJACOREAPI void BNAddStructureMemberAtOffset(BNStructure* s, BNType* type, const char* name, uint64_t offset);
BINARYNINJACOREAPI void BNRemoveStructureMember(BNStructure* s, size_t idx);
+ BINARYNINJACOREAPI void BNReplaceStructureMember(BNStructure* s, size_t idx, BNType* type, const char* name);
BINARYNINJACOREAPI BNEnumeration* BNCreateEnumeration(void);
BINARYNINJACOREAPI BNEnumeration* BNNewEnumerationReference(BNEnumeration* e);
BINARYNINJACOREAPI void BNFreeEnumeration(BNEnumeration* e);
- BINARYNINJACOREAPI char** BNGetEnumerationName(BNEnumeration* e, size_t* size);
- BINARYNINJACOREAPI void BNSetEnumerationName(BNEnumeration* e, const char** name, size_t size);
BINARYNINJACOREAPI BNEnumerationMember* BNGetEnumerationMembers(BNEnumeration* e, size_t* count);
BINARYNINJACOREAPI void BNFreeEnumerationMemberList(BNEnumerationMember* members, size_t count);
BINARYNINJACOREAPI void BNAddEnumerationMember(BNEnumeration* e, const char* name);
BINARYNINJACOREAPI void BNAddEnumerationMemberWithValue(BNEnumeration* e, const char* name, uint64_t value);
+ BINARYNINJACOREAPI void BNRemoveEnumerationMember(BNEnumeration* e, size_t idx);
+ BINARYNINJACOREAPI void BNReplaceEnumerationMember(BNEnumeration* e, size_t idx, const char* name, uint64_t value);
// Source code processing
BINARYNINJACOREAPI bool BNPreprocessSource(const char* source, const char* fileName, char** output, char** errors,
- const char** includeDirs, size_t includeDirCount);
+ const char** includeDirs, size_t includeDirCount);
BINARYNINJACOREAPI bool BNParseTypesFromSource(BNArchitecture* arch, const char* source, const char* fileName,
- BNTypeParserResult* result, char** errors,
- const char** includeDirs, size_t includeDirCount);
+ BNTypeParserResult* result, char** errors, const char** includeDirs, size_t includeDirCount,
+ const char* autoTypeSource);
BINARYNINJACOREAPI bool BNParseTypesFromSourceFile(BNArchitecture* arch, const char* fileName,
- BNTypeParserResult* result, char** errors,
- const char** includeDirs, size_t includeDirCount);
+ BNTypeParserResult* result, char** errors, const char** includeDirs, size_t includeDirCount,
+ const char* autoTypeSource);
BINARYNINJACOREAPI void BNFreeTypeParserResult(BNTypeParserResult* result);
// Updates
@@ -2180,6 +2273,17 @@ extern "C"
BINARYNINJACOREAPI void BNAddRelatedPlatform(BNPlatform* platform, BNArchitecture* arch, BNPlatform* related);
BINARYNINJACOREAPI BNPlatform* BNGetAssociatedPlatformByAddress(BNPlatform* platform, uint64_t* addr);
+ BINARYNINJACOREAPI BNQualifiedNameAndType* BNGetPlatformTypes(BNPlatform* platform, size_t* count);
+ BINARYNINJACOREAPI BNQualifiedNameAndType* BNGetPlatformVariables(BNPlatform* platform, size_t* count);
+ BINARYNINJACOREAPI BNQualifiedNameAndType* BNGetPlatformFunctions(BNPlatform* platform, size_t* count);
+ BINARYNINJACOREAPI BNSystemCallInfo* BNGetPlatformSystemCalls(BNPlatform* platform, size_t* count);
+ BINARYNINJACOREAPI void BNFreeSystemCallList(BNSystemCallInfo* syscalls, size_t count);
+ BINARYNINJACOREAPI BNType* BNGetPlatformTypeByName(BNPlatform* platform, BNQualifiedName* name);
+ BINARYNINJACOREAPI BNType* BNGetPlatformVariableByName(BNPlatform* platform, BNQualifiedName* name);
+ BINARYNINJACOREAPI BNType* BNGetPlatformFunctionByName(BNPlatform* platform, BNQualifiedName* name);
+ BINARYNINJACOREAPI char* BNGetPlatformSystemCallName(BNPlatform* platform, uint32_t number);
+ BINARYNINJACOREAPI BNType* BNGetPlatformSystemCallType(BNPlatform* platform, uint32_t number);
+
//Demangler
BINARYNINJACOREAPI bool BNDemangleMS(BNArchitecture* arch,
const char* mangledName,
@@ -2285,6 +2389,15 @@ extern "C"
size_t* outVarNameElements);
BINARYNINJACOREAPI void BNFreeDemangledName(char*** name, size_t nameElements);
+ // LLVM Services APIs
+ BINARYNINJACOREAPI void BNLlvmServicesInit(void);
+
+ BINARYNINJACOREAPI int BNLlvmServicesAssemble(const char *src, int dialect, const char *triplet,
+ int codeModel, int relocMode, char **outBytes, int *outBytesLen, char **err, int *errLen);
+
+ BINARYNINJACOREAPI void BNLlvmServicesAssembleFree(char *outBytes, char *err);
+
+
// Plugin repository APIs
BINARYNINJACOREAPI const char* BNPluginGetApi(BNRepoPlugin* p);
BINARYNINJACOREAPI const char* BNPluginGetAuthor(BNRepoPlugin* p);