From 4431ddb07ac63b5cd8da5ff4050e335b5ab4d0ba Mon Sep 17 00:00:00 2001 From: Xusheng Date: Thu, 3 Aug 2023 10:49:32 +0800 Subject: Add an API to get structure member including inherited ones. Fix auto structure creation overwrites inherited fields. Close https://github.com/Vector35/binaryninja-api/issues/4540 --- type.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'type.cpp') diff --git a/type.cpp b/type.cpp index 8affdc37..e6e348e5 100644 --- a/type.cpp +++ b/type.cpp @@ -2167,6 +2167,25 @@ vector Structure::GetMembersIncludingInherited(BinaryV } +bool Structure::GetMemberIncludingInheritedAtOffset(BinaryView* view, int64_t offset, + InheritedStructureMember& result) const +{ + BNInheritedStructureMember* member = BNGetMemberIncludingInheritedAtOffset(m_object, view->GetObject(), offset); + if (!member) + return false; + + result.base = member->base ? new NamedTypeReference(BNNewNamedTypeReference(member->base)) : nullptr; + result.baseOffset = member->baseOffset; + result.member.type = new Type(BNNewTypeReference(member->member.type)); + result.member.name = member->member.name; + result.member.offset = member->member.offset; + result.memberIndex = member->memberIndex; + + BNFreeInheritedStructureMember(member); + return true; +} + + bool Structure::GetMemberByName(const string& name, StructureMember& result) const { BNStructureMember* member = BNGetStructureMemberByName(m_object, name.c_str()); -- cgit v1.3.1