diff options
| author | Rusty Wagner <rusty@vector35.com> | 2017-04-27 00:40:07 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2017-04-27 00:40:17 -0400 |
| commit | 448097c6eca321519f2de88619afa804ad6d4ef9 (patch) | |
| tree | 427a61a553f57316898d8a9baf7b372dd0e246d9 | |
| parent | 5076356e33c52b45ccc9a0e794cae5cdd0234fdf (diff) | |
Adding an API for performance debugging
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | binaryninjacore.h | 9 | ||||
| -rw-r--r-- | function.cpp | 13 | ||||
| -rw-r--r-- | python/function.py | 10 |
4 files changed, 34 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index ab84afc4..8812e7c9 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1997,6 +1997,8 @@ namespace BinaryNinja void RequestAdvancedAnalysisData(); void ReleaseAdvancedAnalysisData(); void ReleaseAdvancedAnalysisData(size_t count); + + std::map<std::string, double> GetAnalysisPerformanceInfo(); }; class AdvancedFunctionAnalysisDataRequestor diff --git a/binaryninjacore.h b/binaryninjacore.h index 7e9a034f..dcd9941c 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -1456,6 +1456,12 @@ extern "C" BNILBranchDependence dependence; }; + struct BNPerformanceInfo + { + char* name; + double seconds; + }; + BINARYNINJACOREAPI char* BNAllocString(const char* contents); BINARYNINJACOREAPI void BNFreeString(char* str); BINARYNINJACOREAPI void BNFreeStringList(char** strs, size_t count); @@ -2101,6 +2107,9 @@ extern "C" BINARYNINJACOREAPI void BNSetAutoBasicBlockHighlight(BNBasicBlock* block, BNHighlightColor color); BINARYNINJACOREAPI void BNSetUserBasicBlockHighlight(BNBasicBlock* block, BNHighlightColor color); + BINARYNINJACOREAPI BNPerformanceInfo* BNGetFunctionAnalysisPerformanceInfo(BNFunction* func, size_t* count); + BINARYNINJACOREAPI void BNFreeAnalysisPerformanceInfo(BNPerformanceInfo* info, size_t count); + // Disassembly settings BINARYNINJACOREAPI BNDisassemblySettings* BNCreateDisassemblySettings(void); BINARYNINJACOREAPI BNDisassemblySettings* BNNewDisassemblySettingsReference(BNDisassemblySettings* settings); diff --git a/function.cpp b/function.cpp index d4f91db1..194153a8 100644 --- a/function.cpp +++ b/function.cpp @@ -861,6 +861,19 @@ void Function::ReleaseAdvancedAnalysisData() } +map<string, double> Function::GetAnalysisPerformanceInfo() +{ + size_t count; + BNPerformanceInfo* info = BNGetFunctionAnalysisPerformanceInfo(m_object, &count); + + map<string, double> result; + for (size_t i = 0; i < count; i++) + result[info[i].name] = info[i].seconds; + BNFreeAnalysisPerformanceInfo(info, count); + return result; +} + + AdvancedFunctionAnalysisDataRequestor::AdvancedFunctionAnalysisDataRequestor(Function* func): m_func(func) { if (m_func) diff --git a/python/function.py b/python/function.py index d54cf25a..2a0176c9 100644 --- a/python/function.py +++ b/python/function.py @@ -426,6 +426,16 @@ class Function(object): else: return Function._associated_data[handle.value] + @property + def analysis_performance_info(self): + count = ctypes.c_ulonglong() + info = core.BNGetFunctionAnalysisPerformanceInfo(self.handle, count) + result = {} + for i in xrange(0, count.value): + result[info[i].name] = info[i].seconds + core.BNFreeAnalysisPerformanceInfo(info, count.value) + return result + def __iter__(self): count = ctypes.c_ulonglong() blocks = core.BNGetFunctionBasicBlockList(self.handle, count) |
