diff options
| author | Peter LaFosse <peter@vector35.com> | 2019-03-06 23:37:26 -0500 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2019-03-06 23:37:47 -0500 |
| commit | 42392a91e81b592a65b851bde1d7b236e199cbf9 (patch) | |
| tree | ff45a0e6f642ceb4fbac8b554ab8a818b2d12714 /python | |
| parent | ff682853049753d233ecebbcca0d4bf9a6f1eff0 (diff) | |
Add ability to query cross references directly on data variables
Diffstat (limited to 'python')
| -rw-r--r-- | python/binaryview.py | 31 | ||||
| -rw-r--r-- | python/types.py | 3 |
2 files changed, 28 insertions, 6 deletions
diff --git a/python/binaryview.py b/python/binaryview.py index 02dfeb4a..6b373c27 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -203,10 +203,29 @@ class AnalysisProgress(object): class DataVariable(object): - def __init__(self, addr, var_type, auto_discovered): + def __init__(self, addr, var_type, auto_discovered, view=None): self.address = addr self.type = var_type self.auto_discovered = auto_discovered + self.view = view + + @property + def data_refs_from(self): + """data cross references from this data variable (read-only)""" + return self.view.get_data_refs_from(self.address, len(self.type)) + + @property + def data_refs(self): + """data cross references to this data variable (read-only)""" + return self.view.get_data_refs(self.address, len(self.type)) + + @property + def code_refs(self): + """code references to this data variable (read-only)""" + return self.view.get_code_refs(self.address, len(self.type)) + + def __len__(self): + return len(self.type) def __repr__(self): return "<var 0x%x: %s>" % (self.address, str(self.type)) @@ -286,7 +305,7 @@ class BinaryDataNotificationCallbacks(object): address = var[0].address var_type = types.Type(core.BNNewTypeReference(var[0].type), platform = self.view.platform, confidence = var[0].typeConfidence) auto_discovered = var[0].autoDiscovered - self.notify.data_var_added(self.view, DataVariable(address, var_type, auto_discovered)) + self.notify.data_var_added(self.view, DataVariable(address, var_type, auto_discovered, view)) except: log.log_error(traceback.format_exc()) @@ -295,7 +314,7 @@ class BinaryDataNotificationCallbacks(object): address = var[0].address var_type = types.Type(core.BNNewTypeReference(var[0].type), platform = self.view.platform, confidence = var[0].typeConfidence) auto_discovered = var[0].autoDiscovered - self.notify.data_var_removed(self.view, DataVariable(address, var_type, auto_discovered)) + self.notify.data_var_removed(self.view, DataVariable(address, var_type, auto_discovered, view)) except: log.log_error(traceback.format_exc()) @@ -304,7 +323,7 @@ class BinaryDataNotificationCallbacks(object): address = var[0].address var_type = types.Type(core.BNNewTypeReference(var[0].type), platform = self.view.platform, confidence = var[0].typeConfidence) auto_discovered = var[0].autoDiscovered - self.notify.data_var_updated(self.view, DataVariable(address, var_type, auto_discovered)) + self.notify.data_var_updated(self.view, DataVariable(address, var_type, auto_discovered, view)) except: log.log_error(traceback.format_exc()) @@ -1161,7 +1180,7 @@ class BinaryView(object): addr = var_list[i].address var_type = types.Type(core.BNNewTypeReference(var_list[i].type), platform = self.platform, confidence = var_list[i].typeConfidence) auto_discovered = var_list[i].autoDiscovered - result[addr] = DataVariable(addr, var_type, auto_discovered) + result[addr] = DataVariable(addr, var_type, auto_discovered, self) core.BNFreeDataVariables(var_list, count.value) return result @@ -2353,7 +2372,7 @@ class BinaryView(object): var = core.BNDataVariable() if not core.BNGetDataVariableAtAddress(self.handle, addr, var): return None - return DataVariable(var.address, types.Type(var.type, platform = self.platform, confidence = var.typeConfidence), var.autoDiscovered) + return DataVariable(var.address, types.Type(var.type, platform = self.platform, confidence = var.typeConfidence), var.autoDiscovered, self) def get_functions_containing(self, addr): """ diff --git a/python/types.py b/python/types.py index 19714d54..f1c032b3 100644 --- a/python/types.py +++ b/python/types.py @@ -421,6 +421,9 @@ class Type(object): result = core.BNGetTypeStackAdjustment(self.handle) return SizeWithConfidence(result.value, confidence = result.confidence) + def __len__(self): + return self.width + def __str__(self): platform = None if self.platform is not None: |
