From 0be4dd25ffd6b0308053d9b5c34987d1452b01a7 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Mon, 29 Apr 2024 20:25:31 -0400 Subject: Use LLVM demangler as a fallback for GNU and MS demanglers --- view/elf/elfview.cpp | 4 ++++ view/macho/machoview.cpp | 4 ++++ view/pe/peview.cpp | 8 ++++++++ 3 files changed, 16 insertions(+) diff --git a/view/elf/elfview.cpp b/view/elf/elfview.cpp index 5d1b5cf2..0609fafa 100644 --- a/view/elf/elfview.cpp +++ b/view/elf/elfview.cpp @@ -2370,6 +2370,10 @@ void ElfView::DefineElfSymbol(BNSymbolType type, const string& incomingName, uin if (!typeRef && m_extractMangledTypes && !GetDefaultPlatform()->GetFunctionByName(rawName)) typeRef = demangledType; } + else if (!m_extractMangledTypes && DemangleLLVM(rawName, varName, m_simplifyTemplates)) { + shortName = varName.GetString(); + fullName = shortName; + } else { m_logger->LogDebug("Failed to demangle name: '%s'\n", rawName.c_str()); diff --git a/view/macho/machoview.cpp b/view/macho/machoview.cpp index 8a220515..5f7b3f94 100644 --- a/view/macho/machoview.cpp +++ b/view/macho/machoview.cpp @@ -2334,6 +2334,10 @@ Ref MachoView::DefineMachoSymbol( if (!typeRef && m_extractMangledTypes && !GetDefaultPlatform()->GetFunctionByName(rawName)) typeRef = demangledType; } + else if (!m_extractMangledTypes && DemangleLLVM(rawName, varName, m_simplifyTemplates)) { + shortName = varName.GetString(); + fullName = shortName; + } else { m_logger->LogDebug("Failed to demangle name: '%s'\n", rawName.c_str()); diff --git a/view/pe/peview.cpp b/view/pe/peview.cpp index 19cf7e09..f9f2b77e 100644 --- a/view/pe/peview.cpp +++ b/view/pe/peview.cpp @@ -2785,6 +2785,10 @@ void PEView::AddPESymbol(BNSymbolType type, const string& dll, const string& nam 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()); @@ -2801,6 +2805,10 @@ void PEView::AddPESymbol(BNSymbolType type, const string& dll, const string& nam 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()); -- cgit v1.3.1