diff options
| author | Peter LaFosse <peter@vector35.com> | 2019-04-22 15:37:37 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2019-04-22 15:48:12 -0400 |
| commit | 9969e70ed879fbfa2bf9fdecf2d9012795bed1a3 (patch) | |
| tree | 65fab1adc95154b9400f1451ed9be268a0a265fb /python/types.py | |
| parent | 0215e18c0cc57637a9204f0c2ba4dde4c1cdebee (diff) | |
Add BNGetStructureMemberByName API and add __getitem__ to python Structure API
Diffstat (limited to 'python/types.py')
| -rw-r--r-- | python/types.py | 20 |
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 |
