diff options
| author | Mason Reed <mason@vector35.com> | 2025-04-20 12:25:00 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2025-04-21 10:04:11 -0400 |
| commit | 701c702aba757fbae54fc92e8e91e202cec92300 (patch) | |
| tree | 77b908161cf8464b12f1d49ddcc1083c8141d478 /plugins/rtti/itanium.cpp | |
| parent | 9410640770fd8abc2d09c69dada698c0b690eed3 (diff) | |
Fix misc invalid root type info construction in Itanium RTTI
Fixes https://github.com/Vector35/binaryninja-api/issues/6692
Diffstat (limited to 'plugins/rtti/itanium.cpp')
| -rw-r--r-- | plugins/rtti/itanium.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
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<TypeInfoVariant> 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; |
