summaryrefslogtreecommitdiff
path: root/view/pe/peview.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/peview.cpp
parent5353484086517832418955474757290903351986 (diff)
Demangler plugin API
Closes #467
Diffstat (limited to 'view/pe/peview.cpp')
-rw-r--r--view/pe/peview.cpp49
1 files changed, 11 insertions, 38 deletions
diff --git a/view/pe/peview.cpp b/view/pe/peview.cpp
index 2980d667..e299b0e5 100644
--- a/view/pe/peview.cpp
+++ b/view/pe/peview.cpp
@@ -2965,49 +2965,22 @@ void PEView::AddPESymbol(BNSymbolType type, const string& dll, const string& nam
if (m_arch && name.size() > 0)
{
- QualifiedName demangleName;
+ QualifiedName demangledName;
Ref<Type> demangledType;
- if (name[0] == '?')
+ bool simplify = Settings::Instance()->Get<bool>("analysis.types.templateSimplifier", this);
+ if (DemangleGeneric(m_arch, rawName, demangledType, demangledName, this, simplify))
{
- if (DemangleMS(m_arch, name, demangledType, demangleName, m_simplifyTemplates))
- {
- shortName = demangleName.GetString();
- fullName = shortName + demangledType->GetStringAfterName();
- if (!typeRef && m_extractMangledTypes && !GetDefaultPlatform()->GetFunctionByName(rawName))
- typeRef = demangledType;
- }
- else if (!m_extractMangledTypes && DemangleLLVM(rawName, demangleName, m_simplifyTemplates))
- {
- shortName = demangleName.GetString();
- fullName = shortName;
- }
- else
- {
- m_logger->LogDebug("Failed to demangle: '%s'\n", name.c_str());
- }
+ shortName = demangledName.GetString();
+ fullName = shortName;
+ if (demangledType)
+ fullName += demangledType->GetStringAfterName();
+ if (!typeRef && m_extractMangledTypes && !GetDefaultPlatform()->GetFunctionByName(rawName))
+ typeRef = demangledType;
}
- else if (IsGNU3MangledString(rawName))
+ else
{
- if (DemangleGNU3(m_arch, rawName, demangledType, demangleName, m_simplifyTemplates))
- {
- shortName = demangleName.GetString();
- fullName = shortName;
- if (demangledType)
- fullName += demangledType->GetStringAfterName();
- if (!typeRef && m_extractMangledTypes && !GetDefaultPlatform()->GetFunctionByName(rawName))
- typeRef = demangledType;
- }
- else if (!m_extractMangledTypes && DemangleLLVM(rawName, demangleName, m_simplifyTemplates))
- {
- shortName = demangleName.GetString();
- fullName = shortName;
- }
- else
- {
- m_logger->LogDebug("Failed to demangle name: '%s'\n", rawName.c_str());
- }
+ m_logger->LogDebug("Failed to demangle: '%s'\n", name.c_str());
}
- // Not a mangled string
}
NameSpace ns(dll);