summaryrefslogtreecommitdiff
path: root/view/pe/coffview.cpp
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2024-09-23 17:15:17 -0400
committerGlenn Smith <glenn@vector35.com>2024-10-17 17:33:52 -0400
commit8149774201203326096099394434871992996628 (patch)
treed968976df167dc74090f61051c41ca30e5cc7c8e /view/pe/coffview.cpp
parent5353484086517832418955474757290903351986 (diff)
Demangler plugin API
Closes #467
Diffstat (limited to 'view/pe/coffview.cpp')
-rw-r--r--view/pe/coffview.cpp17
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());
}
}