From 9969e70ed879fbfa2bf9fdecf2d9012795bed1a3 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Mon, 22 Apr 2019 15:37:37 -0400 Subject: Add BNGetStructureMemberByName API and add __getitem__ to python Structure API --- python/types.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'python') 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 -- cgit v1.3.1