summaryrefslogtreecommitdiff
path: root/binaryninjacore.h
diff options
context:
space:
mode:
authorRyan Snyder <ryan@vector35.com>2018-07-09 22:58:18 -0400
committerRyan Snyder <ryan@vector35.com>2018-07-09 23:00:18 -0400
commit838cb56a8505fc78d09befedd58dd632eeb2ee62 (patch)
tree797da072919ae25e8d26a90663c0760e9ef29707 /binaryninjacore.h
parent69743572b93f2e29583751d1ec9656fbb34b9411 (diff)
parent4f1a7824357ab58d868dbd675af9b152fc3694e9 (diff)
Merge branch 'dev'
Diffstat (limited to 'binaryninjacore.h')
-rw-r--r--binaryninjacore.h169
1 files changed, 147 insertions, 22 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index cb4b9eb9..fda26d47 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -120,6 +120,8 @@ extern "C"
struct BNArchitecture;
struct BNFunction;
struct BNBasicBlock;
+ struct BNDownloadProvider;
+ struct BNDownloadInstance;
struct BNFunctionGraph;
struct BNFunctionGraphBlock;
struct BNSymbol;
@@ -332,6 +334,7 @@ extern "C"
LLIL_JUMP_TO,
LLIL_CALL,
LLIL_CALL_STACK_ADJUST,
+ LLIL_TAILCALL,
LLIL_RET,
LLIL_NORET,
LLIL_IF,
@@ -403,6 +406,7 @@ extern "C"
LLIL_FLAG_BIT_SSA,
LLIL_CALL_SSA,
LLIL_SYSCALL_SSA,
+ LLIL_TAILCALL_SSA,
LLIL_CALL_PARAM, // Only valid within the LLIL_CALL_SSA, LLIL_SYSCALL_SSA, LLIL_INTRINSIC, LLIL_INTRINSIC_SSA instructions
LLIL_CALL_STACK_SSA, // Only valid within the LLIL_CALL_SSA or LLIL_SYSCALL_SSA instructions
LLIL_CALL_OUTPUT_SSA, // Only valid within the LLIL_CALL_SSA or LLIL_SYSCALL_SSA instructions
@@ -847,8 +851,8 @@ extern "C"
MLIL_JUMP_TO,
MLIL_CALL, // Not valid in SSA form (see MLIL_CALL_SSA)
MLIL_CALL_UNTYPED, // Not valid in SSA form (see MLIL_CALL_UNTYPED_SSA)
- MLIL_CALL_OUTPUT, // Only valid within MLIL_CALL or MLIL_SYSCALL family instructions
- MLIL_CALL_PARAM, // Only valid within MLIL_CALL or MLIL_SYSCALL family instructions
+ MLIL_CALL_OUTPUT, // Only valid within MLIL_CALL, MLIL_SYSCALL, MLIL_TAILCALL family instructions
+ MLIL_CALL_PARAM, // Only valid within MLIL_CALL, MLIL_SYSCALL, MLIL_TAILCALL family instructions
MLIL_RET, // Not valid in SSA form (see MLIL_RET_SSA)
MLIL_NORET,
MLIL_IF,
@@ -868,6 +872,8 @@ extern "C"
MLIL_ADD_OVERFLOW,
MLIL_SYSCALL, // Not valid in SSA form (see MLIL_SYSCALL_SSA)
MLIL_SYSCALL_UNTYPED, // Not valid in SSA form (see MLIL_SYSCALL_UNTYPED_SSA)
+ MLIL_TAILCALL, // Not valid in SSA form (see MLIL_TAILCALL_SSA)
+ MLIL_TAILCALL_UNTYPED, // Not valid in SSA form (see MLIL_TAILCALL_UNTYPED_SSA)
MLIL_INTRINSIC, // Not valid in SSA form (see MLIL_INTRINSIC_SSA)
MLIL_FREE_VAR_SLOT, // Not valid in SSA from (see MLIL_FREE_VAR_SLOT_SSA)
MLIL_BP,
@@ -915,8 +921,10 @@ extern "C"
MLIL_CALL_UNTYPED_SSA,
MLIL_SYSCALL_SSA,
MLIL_SYSCALL_UNTYPED_SSA,
- MLIL_CALL_PARAM_SSA, // Only valid within the MLIL_CALL_SSA, MLIL_SYSCALL_SSA family instructions
- MLIL_CALL_OUTPUT_SSA, // Only valid within the MLIL_CALL_SSA or MLIL_SYSCALL_SSA family instructions
+ MLIL_TAILCALL_SSA,
+ MLIL_TAILCALL_UNTYPED_SSA,
+ MLIL_CALL_PARAM_SSA, // Only valid within the MLIL_CALL_SSA, MLIL_SYSCALL_SSA, MLIL_TAILCALL_SSA family instructions
+ MLIL_CALL_OUTPUT_SSA, // Only valid within the MLIL_CALL_SSA or MLIL_SYSCALL_SSA, MLIL_TAILCALL_SSA family instructions
MLIL_LOAD_SSA,
MLIL_LOAD_STRUCT_SSA,
MLIL_STORE_SSA,
@@ -1205,6 +1213,7 @@ extern "C"
struct BNDisassemblyTextLine
{
uint64_t addr;
+ size_t instrIndex;
BNInstructionTextToken* tokens;
size_t count;
};
@@ -1365,7 +1374,11 @@ extern "C"
DefaultPluginCommand,
AddressPluginCommand,
RangePluginCommand,
- FunctionPluginCommand
+ FunctionPluginCommand,
+ LowLevelILFunctionPluginCommand,
+ LowLevelILInstructionPluginCommand,
+ MediumLevelILFunctionPluginCommand,
+ MediumLevelILInstructionPluginCommand
};
struct BNPluginCommand
@@ -1379,11 +1392,19 @@ extern "C"
void (*addressCommand)(void* ctxt, BNBinaryView* view, uint64_t addr);
void (*rangeCommand)(void* ctxt, BNBinaryView* view, uint64_t addr, uint64_t len);
void (*functionCommand)(void* ctxt, BNBinaryView* view, BNFunction* func);
+ void (*lowLevelILFunctionCommand)(void* ctxt, BNBinaryView* view, BNLowLevelILFunction* func);
+ void (*lowLevelILInstructionCommand)(void* ctxt, BNBinaryView* view, BNLowLevelILFunction* func, size_t instr);
+ void (*mediumLevelILFunctionCommand)(void* ctxt, BNBinaryView* view, BNMediumLevelILFunction* func);
+ void (*mediumLevelILInstructionCommand)(void* ctxt, BNBinaryView* view, BNMediumLevelILFunction* func, size_t instr);
bool (*defaultIsValid)(void* ctxt, BNBinaryView* view);
bool (*addressIsValid)(void* ctxt, BNBinaryView* view, uint64_t addr);
bool (*rangeIsValid)(void* ctxt, BNBinaryView* view, uint64_t addr, uint64_t len);
bool (*functionIsValid)(void* ctxt, BNBinaryView* view, BNFunction* func);
+ bool (*lowLevelILFunctionIsValid)(void* ctxt, BNBinaryView* view, BNLowLevelILFunction* func);
+ bool (*lowLevelILInstructionIsValid)(void* ctxt, BNBinaryView* view, BNLowLevelILFunction* func, size_t instr);
+ bool (*mediumLevelILFunctionIsValid)(void* ctxt, BNBinaryView* view, BNMediumLevelILFunction* func);
+ bool (*mediumLevelILInstructionIsValid)(void* ctxt, BNBinaryView* view, BNMediumLevelILFunction* func, size_t instr);
};
struct BNCustomCallingConvention
@@ -1455,7 +1476,24 @@ extern "C"
{
IdleState,
DisassembleState,
- AnalyzeState
+ AnalyzeState,
+ ExtendedAnalyzeState
+ };
+
+ struct BNActiveAnalysisInfo
+ {
+ BNFunction* func;
+ uint64_t analysisTime;
+ size_t updateCount;
+ size_t submitCount;
+ };
+
+ struct BNAnalysisInfo
+ {
+ BNAnalysisState state;
+ uint64_t analysisTime;
+ BNActiveAnalysisInfo* activeInfo;
+ size_t count;
};
struct BNAnalysisProgress
@@ -1464,6 +1502,36 @@ extern "C"
size_t count, total;
};
+ struct BNAnalysisParameters
+ {
+ uint64_t maxAnalysisTime;
+ uint64_t maxFunctionSize;
+ uint64_t maxFunctionAnalysisTime;
+ size_t maxFunctionUpdateCount;
+ size_t maxFunctionSubmitCount;
+ };
+
+ struct BNDownloadInstanceOutputCallbacks
+ {
+ uint64_t (*writeCallback)(uint8_t* data, uint64_t len, void* ctxt);
+ void* writeContext;
+ bool (*progressCallback)(void* ctxt, uint64_t progress, uint64_t total);
+ void* progressContext;
+ };
+
+ struct BNDownloadInstanceCallbacks
+ {
+ void* context;
+ void (*destroyInstance)(void* ctxt);
+ int (*performRequest)(void* ctxt, const char* url);
+ };
+
+ struct BNDownloadProviderCallbacks
+ {
+ void* context;
+ BNDownloadInstance* (*createInstance)(void* ctxt);
+ };
+
enum BNFindFlag
{
NoFindFlags = 0,
@@ -1747,6 +1815,14 @@ extern "C"
AlwaysSkipFunctionAnalysis
};
+ enum BNAnalysisSkipReason
+ {
+ NoSkipReason,
+ AlwaysSkipReason,
+ ExceedFunctionSizeSkipReason,
+ ExceedFunctionAnalysisTimeSkipReason
+ };
+
BINARYNINJACOREAPI char* BNAllocString(const char* contents);
BINARYNINJACOREAPI void BNFreeString(char* str);
BINARYNINJACOREAPI char** BNAllocStringList(const char** contents, size_t size);
@@ -2347,6 +2423,11 @@ extern "C"
BINARYNINJACOREAPI BNBasicBlock** BNGetBasicBlockDominanceFrontier(BNBasicBlock* block, size_t* count);
BINARYNINJACOREAPI BNBasicBlock** BNGetBasicBlockIteratedDominanceFrontier(BNBasicBlock** blocks,
size_t incomingCount, size_t* outputCount);
+ BINARYNINJACOREAPI bool BNIsILBasicBlock(BNBasicBlock* block);
+ BINARYNINJACOREAPI bool BNIsLowLevelILBasicBlock(BNBasicBlock* block);
+ BINARYNINJACOREAPI bool BNIsMediumLevelILBasicBlock(BNBasicBlock* block);
+ BINARYNINJACOREAPI BNLowLevelILFunction* BNGetBasicBlockLowLevelILFunction(BNBasicBlock* block);
+ BINARYNINJACOREAPI BNMediumLevelILFunction* BNGetBasicBlockMediumLevelILFunction(BNBasicBlock* block);
BINARYNINJACOREAPI BNDisassemblyTextLine* BNGetBasicBlockDisassemblyText(BNBasicBlock* block,
BNDisassemblySettings* settings, size_t* count);
@@ -2431,9 +2512,12 @@ extern "C"
BINARYNINJACOREAPI bool BNIsFunctionTooLarge(BNFunction* func);
BINARYNINJACOREAPI bool BNIsFunctionAnalysisSkipped(BNFunction* func);
+ BINARYNINJACOREAPI BNAnalysisSkipReason BNGetAnalysisSkipReason(BNFunction* func);
BINARYNINJACOREAPI BNFunctionAnalysisSkipOverride BNGetFunctionAnalysisSkipOverride(BNFunction* func);
BINARYNINJACOREAPI void BNSetFunctionAnalysisSkipOverride(BNFunction* func, BNFunctionAnalysisSkipOverride skip);
+ BINARYNINJACOREAPI BNAnalysisParameters BNGetParametersForAnalysis(BNBinaryView* view);
+ BINARYNINJACOREAPI void BNSetParametersForAnalysis(BNBinaryView* view, BNAnalysisParameters params);
BINARYNINJACOREAPI uint64_t BNGetMaxFunctionSizeForAnalysis(BNBinaryView* view);
BINARYNINJACOREAPI void BNSetMaxFunctionSizeForAnalysis(BNBinaryView* view, uint64_t size);
@@ -2443,6 +2527,8 @@ extern "C"
BINARYNINJACOREAPI void BNFreeAnalysisCompletionEvent(BNAnalysisCompletionEvent* event);
BINARYNINJACOREAPI void BNCancelAnalysisCompletionEvent(BNAnalysisCompletionEvent* event);
+ BINARYNINJACOREAPI BNAnalysisInfo* BNGetAnalysisInfo(BNBinaryView* view);
+ BINARYNINJACOREAPI void BNFreeAnalysisInfo(BNAnalysisInfo* info);
BINARYNINJACOREAPI BNAnalysisProgress BNGetAnalysisProgress(BNBinaryView* view);
BINARYNINJACOREAPI BNBackgroundTask* BNGetBackgroundAnalysisTask(BNBinaryView* view);
@@ -2547,6 +2633,11 @@ extern "C"
BINARYNINJACOREAPI void BNSetFunctionGraphCompleteCallback(BNFunctionGraph* graph, void* ctxt, void (*func)(void* ctxt));
BINARYNINJACOREAPI void BNAbortFunctionGraph(BNFunctionGraph* graph);
BINARYNINJACOREAPI BNFunctionGraphType BNGetFunctionGraphType(BNFunctionGraph* graph);
+ BINARYNINJACOREAPI bool BNIsILFunctionGraph(BNFunctionGraph* graph);
+ BINARYNINJACOREAPI bool BNIsLowLevelILFunctionGraph(BNFunctionGraph* graph);
+ BINARYNINJACOREAPI bool BNIsMediumLevelILFunctionGraph(BNFunctionGraph* graph);
+ BINARYNINJACOREAPI BNLowLevelILFunction* BNGetFunctionGraphLowLevelILFunction(BNFunctionGraph* graph);
+ BINARYNINJACOREAPI BNMediumLevelILFunction* BNGetFunctionGraphMediumLevelILFunction(BNFunctionGraph* graph);
BINARYNINJACOREAPI BNFunctionGraphBlock** BNGetFunctionGraphBlocks(BNFunctionGraph* graph, size_t* count);
BINARYNINJACOREAPI BNFunctionGraphBlock** BNGetFunctionGraphBlocksInRegion(
@@ -2807,6 +2898,8 @@ extern "C"
size_t version, size_t* count);
BINARYNINJACOREAPI size_t* BNGetMediumLevelILSSAMemoryUses(BNMediumLevelILFunction* func,
size_t version, size_t* count);
+ BINARYNINJACOREAPI bool BNIsMediumLevelILSSAVarLive(BNMediumLevelILFunction* func,
+ const BNVariable* var, size_t version);
BINARYNINJACOREAPI size_t* BNGetMediumLevelILVariableDefinitions(BNMediumLevelILFunction* func,
const BNVariable* var, size_t* count);
@@ -3017,29 +3110,45 @@ extern "C"
// Plugin commands
BINARYNINJACOREAPI void BNRegisterPluginCommand(const char* name, const char* description,
- void (*action)(void* ctxt, BNBinaryView* view),
- bool (*isValid)(void* ctxt, BNBinaryView* view), void* context);
+ void (*action)(void* ctxt, BNBinaryView* view), bool (*isValid)(void* ctxt, BNBinaryView* view), void* context);
BINARYNINJACOREAPI void BNRegisterPluginCommandForAddress(const char* name, const char* description,
- void (*action)(void* ctxt, BNBinaryView* view, uint64_t addr),
- bool (*isValid)(void* ctxt, BNBinaryView* view, uint64_t addr),
- void* context);
+ void (*action)(void* ctxt, BNBinaryView* view, uint64_t addr),
+ bool (*isValid)(void* ctxt, BNBinaryView* view, uint64_t addr), void* context);
BINARYNINJACOREAPI void BNRegisterPluginCommandForRange(const char* name, const char* description,
- void (*action)(void* ctxt, BNBinaryView* view, uint64_t addr, uint64_t len),
- bool (*isValid)(void* ctxt, BNBinaryView* view, uint64_t addr, uint64_t len),
- void* context);
+ void (*action)(void* ctxt, BNBinaryView* view, uint64_t addr, uint64_t len),
+ bool (*isValid)(void* ctxt, BNBinaryView* view, uint64_t addr, uint64_t len), void* context);
BINARYNINJACOREAPI void BNRegisterPluginCommandForFunction(const char* name, const char* description,
- void (*action)(void* ctxt, BNBinaryView* view, BNFunction* func),
- bool (*isValid)(void* ctxt, BNBinaryView* view, BNFunction* func),
- void* context);
+ void (*action)(void* ctxt, BNBinaryView* view, BNFunction* func),
+ bool (*isValid)(void* ctxt, BNBinaryView* view, BNFunction* func), void* context);
+ BINARYNINJACOREAPI void BNRegisterPluginCommandForLowLevelILFunction(const char* name, const char* description,
+ void (*action)(void* ctxt, BNBinaryView* view, BNLowLevelILFunction* func),
+ bool (*isValid)(void* ctxt, BNBinaryView* view, BNLowLevelILFunction* func), void* context);
+ BINARYNINJACOREAPI void BNRegisterPluginCommandForLowLevelILInstruction(const char* name, const char* description,
+ void (*action)(void* ctxt, BNBinaryView* view, BNLowLevelILFunction* func, size_t instr),
+ bool (*isValid)(void* ctxt, BNBinaryView* view, BNLowLevelILFunction* func, size_t instr), void* context);
+ BINARYNINJACOREAPI void BNRegisterPluginCommandForMediumLevelILFunction(const char* name, const char* description,
+ void (*action)(void* ctxt, BNBinaryView* view, BNMediumLevelILFunction* func),
+ bool (*isValid)(void* ctxt, BNBinaryView* view, BNMediumLevelILFunction* func), void* context);
+ BINARYNINJACOREAPI void BNRegisterPluginCommandForMediumLevelILInstruction(const char* name, const char* description,
+ void (*action)(void* ctxt, BNBinaryView* view, BNMediumLevelILFunction* func, size_t instr),
+ bool (*isValid)(void* ctxt, BNBinaryView* view, BNMediumLevelILFunction* func, size_t instr), void* context);
BINARYNINJACOREAPI BNPluginCommand* BNGetAllPluginCommands(size_t* count);
BINARYNINJACOREAPI BNPluginCommand* BNGetValidPluginCommands(BNBinaryView* view, size_t* count);
BINARYNINJACOREAPI BNPluginCommand* BNGetValidPluginCommandsForAddress(BNBinaryView* view, uint64_t addr,
- size_t* count);
+ size_t* count);
BINARYNINJACOREAPI BNPluginCommand* BNGetValidPluginCommandsForRange(BNBinaryView* view, uint64_t addr,
- uint64_t len, size_t* count);
+ uint64_t len, size_t* count);
BINARYNINJACOREAPI BNPluginCommand* BNGetValidPluginCommandsForFunction(BNBinaryView* view, BNFunction* func,
- size_t* count);
+ size_t* count);
+ BINARYNINJACOREAPI BNPluginCommand* BNGetValidPluginCommandsForLowLevelILFunction(BNBinaryView* view,
+ BNLowLevelILFunction* func, size_t* count);
+ BINARYNINJACOREAPI BNPluginCommand* BNGetValidPluginCommandsForLowLevelILInstruction(BNBinaryView* view,
+ BNLowLevelILFunction* func, size_t instr, size_t* count);
+ BINARYNINJACOREAPI BNPluginCommand* BNGetValidPluginCommandsForMediumLevelILFunction(BNBinaryView* view,
+ BNMediumLevelILFunction* func, size_t* count);
+ BINARYNINJACOREAPI BNPluginCommand* BNGetValidPluginCommandsForMediumLevelILInstruction(BNBinaryView* view,
+ BNMediumLevelILFunction* func, size_t instr, size_t* count);
BINARYNINJACOREAPI void BNFreePluginCommandList(BNPluginCommand* commands);
// Calling conventions
@@ -3148,6 +3257,24 @@ extern "C"
char*** outVarName,
size_t* outVarNameElements);
+ // Download providers
+ BINARYNINJACOREAPI BNDownloadProvider* BNRegisterDownloadProvider(const char* name, BNDownloadProviderCallbacks* callbacks);
+ BINARYNINJACOREAPI BNDownloadProvider** BNGetDownloadProviderList(size_t* count);
+ BINARYNINJACOREAPI void BNFreeDownloadProviderList(BNDownloadProvider** providers);
+ BINARYNINJACOREAPI BNDownloadProvider* BNGetDownloadProviderByName(const char* name);
+
+ BINARYNINJACOREAPI char* BNGetDownloadProviderName(BNDownloadProvider* provider);
+ BINARYNINJACOREAPI BNDownloadInstance* BNCreateDownloadProviderInstance(BNDownloadProvider* provider);
+
+ BINARYNINJACOREAPI BNDownloadInstance* BNInitDownloadInstance(BNDownloadProvider* provider, BNDownloadInstanceCallbacks* callbacks);
+ BINARYNINJACOREAPI BNDownloadInstance* BNNewDownloadInstanceReference(BNDownloadInstance* instance);
+ BINARYNINJACOREAPI void BNFreeDownloadInstance(BNDownloadInstance* instance);
+ BINARYNINJACOREAPI int BNPerformDownloadRequest(BNDownloadInstance* instance, const char* url, BNDownloadInstanceOutputCallbacks* callbacks);
+ BINARYNINJACOREAPI uint64_t BNWriteDataForDownloadInstance(BNDownloadInstance* instance, uint8_t* data, uint64_t len);
+ BINARYNINJACOREAPI bool BNNotifyProgressForDownloadInstance(BNDownloadInstance* instance, uint64_t progress, uint64_t total);
+ BINARYNINJACOREAPI char* BNGetErrorForDownloadInstance(BNDownloadInstance* instance);
+ BINARYNINJACOREAPI void BNSetErrorForDownloadInstance(BNDownloadInstance* instance, const char* error);
+
// Scripting providers
BINARYNINJACOREAPI BNScriptingProvider* BNRegisterScriptingProvider(const char* name,
BNScriptingProviderCallbacks* callbacks);
@@ -3413,8 +3540,6 @@ extern "C"
BINARYNINJACOREAPI BNMetadata* BNBinaryViewQueryMetadata(BNBinaryView* view, const char* key);
BINARYNINJACOREAPI void BNBinaryViewRemoveMetadata(BNBinaryView* view, const char* key);
- BINARYNINJACOREAPI char* BNGetLinuxCADirectory();
- BINARYNINJACOREAPI char* BNGetLinuxCABundlePath();
#ifdef __cplusplus
}
#endif