summaryrefslogtreecommitdiff
path: root/type.cpp
diff options
context:
space:
mode:
authorXusheng <xusheng@vector35.com>2023-08-03 10:49:32 +0800
committerXusheng <xusheng@vector35.com>2023-08-03 10:49:32 +0800
commit4431ddb07ac63b5cd8da5ff4050e335b5ab4d0ba (patch)
tree0bd3e6cd201bc27817cabc26f7f24fffe94e8aa0 /type.cpp
parentded699dfc4d5e149c8ad4daf467adac1f94e5822 (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.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/type.cpp b/type.cpp
index 8affdc37..e6e348e5 100644
--- a/type.cpp
+++ b/type.cpp
@@ -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());