diff options
| author | Rusty Wagner <rusty@vector35.com> | 2016-09-03 01:32:35 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2016-09-03 01:32:35 -0400 |
| commit | 50cafb19ae59ba48fea2e7bd0c79a2e9473c2c86 (patch) | |
| tree | f8025ed9b2f7adc6a3cdfd04cd46cb3fdda2ead7 /python | |
| parent | 75f597bb8fcd58315537f1dcd9802bbaadcdbd36 (diff) | |
Adding APIs to ensure IL is available for upcoming caching methods
Diffstat (limited to 'python')
| -rw-r--r-- | python/__init__.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/python/__init__.py b/python/__init__.py index d199385a..cd559fe5 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -4330,8 +4330,11 @@ class Function(object): def __init__(self, view, handle): self._view = view self.handle = core.handle_of_type(handle, core.BNFunction) + self._advanced_analysis_requests = 0 def __del__(self): + if self._advanced_analysis_requests > 0: + core.BNReleaseAdvancedFunctionAnalysisDataMultiple(self.handle, self._advanced_analysis_requests) core.BNFreeFunction(self.handle) @property @@ -4726,6 +4729,41 @@ class Function(object): """ core.BNReanalyzeFunction(self.handle) + def request_advanced_analysis_data(self): + core.BNRequestAdvancedFunctionAnalysisData(self.handle) + self._advanced_analysis_requests += 1 + + def release_advanced_analysis_data(self): + core.BNReleaseAdvancedFunctionAnalysisData(self.handle) + self._advanced_analysis_requests -= 1 + +class AdvancedFunctionAnalysisDataRequestor(object): + def __init__(self, func = None): + self._function = func + if self._function is not None: + self._function.request_advanced_analysis_data() + + def __del__(self): + if self._function is not None: + self._function.release_advanced_analysis_data() + + @property + def function(self): + return self._function + + @function.setter + def function(self, func): + if self._function is not None: + self._function.release_advanced_analysis_data() + self._function = func + if self._function is not None: + self._function.request_advanced_analysis_data() + + def close(self): + if self._function is not None: + self._function.release_advanced_analysis_data() + self._function = None + class BasicBlockEdge: def __init__(self, branch_type, target, arch): self.type = core.BNBranchType_names[branch_type] |
