summaryrefslogtreecommitdiff
path: root/python/types.py
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2019-04-22 15:37:37 -0400
committerPeter LaFosse <peter@vector35.com>2019-04-22 15:48:12 -0400
commit9969e70ed879fbfa2bf9fdecf2d9012795bed1a3 (patch)
tree65fab1adc95154b9400f1451ed9be268a0a265fb /python/types.py
parent0215e18c0cc57637a9204f0c2ba4dde4c1cdebee (diff)
Add BNGetStructureMemberByName API and add __getitem__ to python Structure API
Diffstat (limited to 'python/types.py')
-rw-r--r--python/types.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/python/types.py b/python/types.py
index 70a9d6cc..68d20997 100644
--- a/python/types.py
+++ b/python/types.py
@@ -880,16 +880,26 @@ class Structure(object):
return True
return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents)
+ def __getitem__(self, name):
+ try:
+ member = core.BNGetStructureMemberByName(self.handle, name)
+ return StructureMember(Type(core.BNNewTypeReference(member.contents.type), confidence=member.contents.typeConfidence),
+ member.contents.name, member.contents.offset)
+ finally:
+ core.BNFreeStructureMember(member)
+
@property
def members(self):
"""Structure member list (read-only)"""
count = ctypes.c_ulonglong()
members = core.BNGetStructureMembers(self.handle, count)
- result = []
- for i in range(0, count.value):
- result.append(StructureMember(Type(core.BNNewTypeReference(members[i].type), confidence = members[i].typeConfidence),
- members[i].name, members[i].offset))
- core.BNFreeStructureMemberList(members, count.value)
+ try:
+ result = []
+ for i in range(0, count.value):
+ result.append(StructureMember(Type(core.BNNewTypeReference(members[i].type), confidence=members[i].typeConfidence),
+ members[i].name, members[i].offset))
+ finally:
+ core.BNFreeStructureMemberList(members, count.value)
return result
@property