diff options
| author | Peter LaFosse <peter@vector35.com> | 2020-05-27 09:01:19 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2020-05-27 10:26:29 -0400 |
| commit | 4c9fb0b8b94bbd422dc0ea63c50c784624bf6be5 (patch) | |
| tree | 546be963cb4227b4a4bf5fcfff64907eb1af5aa0 /python | |
| parent | fed4a230aab3b689b57ce02edd8948691f94baee (diff) | |
Add context manager for BinaryViews in the python API
Diffstat (limited to 'python')
| -rw-r--r-- | python/__init__.py | 24 | ||||
| -rw-r--r-- | python/binaryview.py | 6 |
2 files changed, 30 insertions, 0 deletions
diff --git a/python/__init__.py b/python/__init__.py index c046d51e..82f591db 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -255,3 +255,27 @@ def get_memory_usage_info(): core.BNFreeMemoryUsageInfo(info, count.value) return result + +class open_view(object): + """ + Context Manager for BinaryView objects + + :Example: + >>> from binaryninja import * + >>> with open_view("/bin/ls") as bv: + ... print(len(bv.functions)) + ... + 128 + + """ + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + def __enter__(self): + self.view = BinaryViewType.get_view_of_file(*self.args, **self.kwargs) + return self.view + + def __exit__(self, type, value, traceback): + if self.view is not None: + self.view.file.close()
\ No newline at end of file diff --git a/python/binaryview.py b/python/binaryview.py index 9074b58c..994d9edd 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -1323,6 +1323,12 @@ class BinaryView(object): self._notifications = {} self._next_address = None # Do NOT try to access view before init() is called, use placeholder + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.file.close() + def __del__(self): for i in self.notifications.values(): i._unregister() |
