diff options
| author | Xusheng <xusheng@vector35.com> | 2023-08-03 10:49:32 +0800 |
|---|---|---|
| committer | Xusheng <xusheng@vector35.com> | 2023-08-03 10:49:32 +0800 |
| commit | 4431ddb07ac63b5cd8da5ff4050e335b5ab4d0ba (patch) | |
| tree | 0bd3e6cd201bc27817cabc26f7f24fffe94e8aa0 /type.cpp | |
| parent | ded699dfc4d5e149c8ad4daf467adac1f94e5822 (diff) | |
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
Diffstat (limited to 'type.cpp')
| -rw-r--r-- | type.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -2167,6 +2167,25 @@ vector<InheritedStructureMember> 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()); |
