summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2020-09-17 16:55:07 -0400
committerBrian Potchik <brian@vector35.com>2020-09-17 16:55:07 -0400
commitd5f15cc005c0eed171d8e09356d298060dc5c98c (patch)
treece597b8aaacb8f1ec3903e9bb6a6e9577345e7c5 /python
parent8673a71c60bfcc88d60a8762e8e62d6443b528ce (diff)
Fix get_next_data_var_after when handling auto data variables shadowed by user data variables, again.
Diffstat (limited to 'python')
-rw-r--r--python/binaryview.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/python/binaryview.py b/python/binaryview.py
index 5b83b01f..49c7c788 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -4340,15 +4340,17 @@ class BinaryView(object):
<var 0x1000003c: int32_t>
>>>
"""
- next_data_var_start = core.BNGetNextDataVariableStartAfterAddress(self.handle, addr)
- if next_data_var_start == self.end:
- return None
- var = core.BNDataVariable()
- if not core.BNGetDataVariableAtAddress(self.handle, next_data_var_start, var):
- return None
- if var.address < next_data_var_start:
- if not core.BNGetDataVariableAtAddress(self.handle, var.address + core.BNGetTypeWidth(var.type), var):
+ while True:
+ next_data_var_start = core.BNGetNextDataVariableStartAfterAddress(self.handle, addr)
+ if next_data_var_start == self.end:
+ return None
+ var = core.BNDataVariable()
+ if not core.BNGetDataVariableAtAddress(self.handle, next_data_var_start, var):
return None
+ if var.address < next_data_var_start:
+ addr = var.address + core.BNGetTypeWidth(var.type)
+ continue
+ break
return DataVariable(var.address, types.Type(var.type, platform = self.platform, confidence = var.typeConfidence), var.autoDiscovered, self)
def get_next_data_var_start_after(self, addr):