diff options
| author | Glenn Smith <glenn@vector35.com> | 2024-09-23 17:15:17 -0400 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2024-10-17 17:33:52 -0400 |
| commit | 8149774201203326096099394434871992996628 (patch) | |
| tree | d968976df167dc74090f61051c41ca30e5cc7c8e /view/pe/coffview.cpp | |
| parent | 5353484086517832418955474757290903351986 (diff) | |
Demangler plugin API
Closes #467
Diffstat (limited to 'view/pe/coffview.cpp')
| -rw-r--r-- | view/pe/coffview.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/view/pe/coffview.cpp b/view/pe/coffview.cpp index be8cef8e..28103a4a 100644 --- a/view/pe/coffview.cpp +++ b/view/pe/coffview.cpp @@ -1518,22 +1518,23 @@ void COFFView::AddCOFFSymbol(BNSymbolType type, const string& dll, const string& string shortName = rawName; string fullName = rawName; - if (m_arch && name.size() > 0 && name[0] == '?') + if (m_arch && name.size() > 0) { - QualifiedName demangleName; + QualifiedName demangledName; Ref<Type> demangledType; - if (DemangleMS(m_arch, name, demangledType, demangleName, m_simplifyTemplates)) + bool simplify = Settings::Instance()->Get<bool>("analysis.types.templateSimplifier", this); + if (DemangleGeneric(m_arch, rawName, demangledType, demangledName, this, simplify)) { - shortName = demangleName.GetString(); - fullName = shortName + demangledType->GetStringAfterName(); + shortName = demangledName.GetString(); + fullName = shortName; + if (demangledType) + fullName += demangledType->GetStringAfterName(); if (!symbolTypeRef && m_extractMangledTypes && !GetDefaultPlatform()->GetFunctionByName(rawName)) symbolTypeRef = demangledType; } else { - // TODO: This is happening a lot, so figure out why the demangler can't handle symbols like "??_C@_0M@LLLPOAKG@hasChildren@" - // For now, disable the message because it's very noisy for some binaries - DEBUG_COFF(m_logger->LogDebug("COFF: Failed to demangle: '%s'\n", name.c_str())); + m_logger->LogDebug("Failed to demangle: '%s'\n", name.c_str()); } } |
