From 701c702aba757fbae54fc92e8e91e202cec92300 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Sun, 20 Apr 2025 12:25:00 -0400 Subject: Fix misc invalid root type info construction in Itanium RTTI Fixes https://github.com/Vector35/binaryninja-api/issues/6692 --- plugins/rtti/itanium.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'plugins/rtti/itanium.cpp') diff --git a/plugins/rtti/itanium.cpp b/plugins/rtti/itanium.cpp index 745324c7..95122fad 100644 --- a/plugins/rtti/itanium.cpp +++ b/plugins/rtti/itanium.cpp @@ -330,6 +330,13 @@ std::optional ReadTypeInfoVariant(BinaryView *view, uint64_t ob auto baseSymName = baseSym->GetShortName(); if (baseSymName.find("__cxxabiv1") != std::string::npos) { + // Skip char array base data variables. This fixes the root base types being constructed twice at 0x0 and +0x8. + // 1400f81a0 void* _typeinfo_for___cxxabiv1::__class_type_info = data_1400fce10 <---- First at 0x0 + // 1400f81a8 struct __cxxabiv1::__class_type_info _typeinfo_for_��@ = <----- Second at 0x8 + DataVariable baseDV; + if (view->GetDataVariableAtAddress(typeInfo->base, baseDV) && baseDV.type->IsArray()) + return std::nullopt; + // symbol takes the form of `abi::base_name::addend` if (baseSymName.find("si_class_type_info") != std::string::npos) return TIVSIClass; -- cgit v1.3.1