From ff682853049753d233ecebbcca0d4bf9a6f1eff0 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Sun, 3 Mar 2019 22:29:03 -0500 Subject: Add get_data_refs_from API --- python/binaryview.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'python') diff --git a/python/binaryview.py b/python/binaryview.py index b316f24b..02dfeb4a 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -2492,6 +2492,20 @@ class BinaryView(object): return result def get_data_refs(self, addr, length=None): + """ + ``get_data_refs`` returns a list of virtual addresses of data which references ``addr``. Optionally specifying + a length. When ``length`` is set ``get_data_refs`` returns the data which references in the range ``addr``-``addr``+``length``. + + :param int addr: virtual address to query for references + :param int length: optional length of query + :return: list of integers + :rtype: list(integer) + :Example: + + >>> bv.get_data_refs(here) + [4203812] + >>> + """ count = ctypes.c_ulonglong(0) if length is None: refs = core.BNGetDataReferences(self.handle, addr, count) @@ -2504,6 +2518,33 @@ class BinaryView(object): core.BNFreeDataReferences(refs, count.value) return result + def get_data_refs_from(self, addr, length=None): + """ + ``get_data_refs_from`` returns a list of virtual addresses referenced by the address ``addr``. Optionally specifying + a length. When ``length`` is set ``get_data_refs_from`` returns the data referenced in the range ``addr``-``addr``+``length``. + + :param int addr: virtual address to query for references + :param int length: optional length of query + :return: list of integers + :rtype: list(integer) + :Example: + + >>> bv.get_data_refs_from(here) + [4200327] + >>> + """ + count = ctypes.c_ulonglong(0) + if length is None: + refs = core.BNGetDataReferencesFrom(self.handle, addr, count) + else: + refs = core.BNGetDataReferencesFromInRange(self.handle, addr, length, count) + + result = [] + for i in range(0, count.value): + result.append(refs[i]) + core.BNFreeDataReferences(refs, count.value) + return result + def get_symbol_at(self, addr, namespace=None): """ -- cgit v1.3.1