diff options
| author | nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> | 2025-01-20 16:48:44 +1100 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-01-25 17:59:09 -0500 |
| commit | 03d9757c948fba0792d80f6e143b24b49748e7b2 (patch) | |
| tree | 31fba94debaffa51474f09525ceba4b613ebd5f4 /plugins/msvc_rtti/rtti.cpp | |
| parent | 9fad830755f7f1675237541aa5dc363071cf65a3 (diff) | |
MSVC RTTI: Define attribute enumerations for Base Class Descriptors and Class Hierarchy Descriptors
Diffstat (limited to 'plugins/msvc_rtti/rtti.cpp')
| -rw-r--r-- | plugins/msvc_rtti/rtti.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/plugins/msvc_rtti/rtti.cpp b/plugins/msvc_rtti/rtti.cpp index 7dfa6130..1ec85393 100644 --- a/plugins/msvc_rtti/rtti.cpp +++ b/plugins/msvc_rtti/rtti.cpp @@ -141,6 +141,7 @@ Ref<Type> BaseClassDescriptorType(BinaryView *view, BNPointerBaseType ptrBaseTy) if (typeCache == nullptr) { + Ref<Architecture> arch = view->GetDefaultArchitecture(); Ref<Type> uintType = Type::IntegerType(4, false); StructureBuilder baseClassDescriptorBuilder; @@ -151,7 +152,17 @@ Ref<Type> BaseClassDescriptorType(BinaryView *view, BNPointerBaseType ptrBaseTy) baseClassDescriptorBuilder.AddMember(pTypeDescType, "pTypeDescriptor"); baseClassDescriptorBuilder.AddMember(uintType, "numContainedBases"); baseClassDescriptorBuilder.AddMember(GetPMDType(view), "where"); - baseClassDescriptorBuilder.AddMember(uintType, "attributes"); + Ref<Enumeration> attrEnum = EnumerationBuilder() + .AddMemberWithValue("BCD_NOT_VISIBLE", 0x01) + .AddMemberWithValue("BCD_AMBIGUOUS", 0x02) + .AddMemberWithValue("BCD_PRIVORPROTBASE", 0x04) + .AddMemberWithValue("BCD_PRIVORPROTINCOMPOBJ", 0x08) + .AddMemberWithValue("BCD_VBOFCONTOBJ", 0x10) + .AddMemberWithValue("BCD_NONPOLYMORPHIC", 0x20) + .AddMemberWithValue("BCD_HASPCHD", 0x40) + .Finalize(); + Ref<Type> attrType = Type::EnumerationType(arch, attrEnum, 4); + baseClassDescriptorBuilder.AddMember(attrType, "attributes"); Ref<Type> pClassDescType = TypeBuilder::PointerType(4, ClassHierarchyDescriptorType(view, ptrBaseTy)) .SetPointerBase(ptrBaseTy, 0) .Finalize(); @@ -185,11 +196,18 @@ Ref<Type> ClassHierarchyDescriptorType(BinaryView *view, BNPointerBaseType ptrBa if (typeCache == nullptr) { + Ref<Architecture> arch = view->GetDefaultArchitecture(); Ref<Type> uintType = Type::IntegerType(4, false); StructureBuilder classHierarchyDescriptorBuilder; classHierarchyDescriptorBuilder.AddMember(uintType, "signature"); - classHierarchyDescriptorBuilder.AddMember(uintType, "attributes"); + Ref<Enumeration> attrEnum = EnumerationBuilder() + .AddMemberWithValue("CHD_MULTINH", 0x01) + .AddMemberWithValue("CHD_VIRTINH", 0x02) + .AddMemberWithValue("CHD_AMBIGUOUS", 0x04) + .Finalize(); + Ref<Type> attrType = Type::EnumerationType(arch, attrEnum, 4); + classHierarchyDescriptorBuilder.AddMember(attrType, "attributes"); classHierarchyDescriptorBuilder.AddMember(uintType, "numBaseClasses"); Ref<Type> pBaseClassArrayType = TypeBuilder::PointerType(4, Type::VoidType()) .SetPointerBase(ptrBaseTy, 0) |
