From 4c9fb0b8b94bbd422dc0ea63c50c784624bf6be5 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Wed, 27 May 2020 09:01:19 -0400 Subject: Add context manager for BinaryViews in the python API --- python/__init__.py | 24 ++++++++++++++++++++++++ python/binaryview.py | 6 ++++++ 2 files changed, 30 insertions(+) (limited to 'python') 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() -- cgit v1.3.1