diff options
| author | nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> | 2025-01-20 19:58:33 +1100 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-01-25 17:59:10 -0500 |
| commit | 567988ad3cd7da3fac9298e24f733b61d37c1e13 (patch) | |
| tree | 8a9e17c0a8b87793b5155912cc9f40f0640650c2 /plugins/msvc_rtti/rtti.cpp | |
| parent | 5fcb4881dde3bb568f968db866c904e1d0a6f588 (diff) | |
MSVC RTTI: Narrow when pClassHierarchyDescriptor is recursed into
Diffstat (limited to 'plugins/msvc_rtti/rtti.cpp')
| -rw-r--r-- | plugins/msvc_rtti/rtti.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/plugins/msvc_rtti/rtti.cpp b/plugins/msvc_rtti/rtti.cpp index f1d172a1..07a33d61 100644 --- a/plugins/msvc_rtti/rtti.cpp +++ b/plugins/msvc_rtti/rtti.cpp @@ -6,6 +6,7 @@ constexpr int COL_SIG_REV0 = 0; constexpr int COL_SIG_REV1 = 1; constexpr int RTTI_CONFIDENCE = 100; +constexpr int BCD_HASPCHD = 0x40; ClassHierarchyDescriptor::ClassHierarchyDescriptor(BinaryView *view, uint64_t address) { @@ -503,8 +504,10 @@ std::optional<ClassInfo> MicrosoftRTTIProcessor::ProcessRTTI(uint64_t coLocatorA m_view->DefineDataVariable(baseClassTypeDescAddr, Confidence(TypeDescriptorType(m_view, baseClassTypeDesc.name.length()), RTTI_CONFIDENCE)); - auto classHierarchyDescAddr = resolveAddr(baseClassDesc.pClassHierarchyDescriptor); - baseClasses[classHierarchyDescAddr] = baseClassInfo; + if (baseClassDesc.attributes & BCD_HASPCHD) { + auto classHierarchyDescAddr = resolveAddr(baseClassDesc.pClassHierarchyDescriptor); + baseClasses[classHierarchyDescAddr] = baseClassInfo; + } } return baseClasses; |
