33using namespace BinaryNinja ;
44using namespace BinaryNinja ::RTTI;
55
6+ namespace
7+ {
8+ std::string NormalizeRTTIClassName (std::string name)
9+ {
10+ size_t beginFind = name.find_first_of (' ' );
11+ if (beginFind != std::string::npos)
12+ name.erase (0 , beginFind + 1 );
13+ size_t endFind = name.find (" `RTTI Type Descriptor Name'" );
14+ if (endFind != std::string::npos)
15+ name.erase (endFind, name.length ());
16+ return name;
17+ }
18+ }
19+
620
721Ref<Symbol> RTTI::GetRealSymbol (BinaryView *view, uint64_t relocAddr, uint64_t symAddr)
822{
@@ -24,9 +38,9 @@ std::optional<std::string> RTTI::DemangleNameMS(BinaryView* view, bool allowMang
2438{
2539 QualifiedName demangledName = {};
2640 Ref<Type> outType = {};
27- if (!DemangleMS (view->GetDefaultArchitecture (), mangledName, outType, demangledName, true ))
41+ if (!DemangleMS (view->GetDefaultArchitecture (), mangledName, outType, demangledName, view ))
2842 return DemangleNameLLVM (allowMangled, mangledName);
29- return demangledName.GetString ();
43+ return NormalizeRTTIClassName ( demangledName.GetString () );
3044}
3145
3246
@@ -90,14 +104,7 @@ std::optional<std::string> RTTI::DemangleNameLLVM(bool allowMangled, const std::
90104 Ref<Type> outType = {};
91105 if (!DemangleLLVM (mangledName, demangledName, true ))
92106 return allowMangled ? std::optional (mangledName) : std::nullopt ;
93- auto demangledNameStr = demangledName.GetString ();
94- size_t beginFind = demangledNameStr.find_first_of (' ' );
95- if (beginFind != std::string::npos)
96- demangledNameStr.erase (0 , beginFind + 1 );
97- size_t endFind = demangledNameStr.find (" `RTTI Type Descriptor Name'" );
98- if (endFind != std::string::npos)
99- demangledNameStr.erase (endFind, demangledNameStr.length ());
100- return demangledNameStr;
107+ return NormalizeRTTIClassName (demangledName.GetString ());
101108}
102109
103110
0 commit comments