1
0
Fork 0

Switch to LLVMDemangle for symbol demangling

Thanks to @Khangaroo for the bug report!
This commit is contained in:
Duncan Ogilvie 2022-05-14 16:04:28 +02:00
parent ac0cf910a4
commit d77f2d9b09
8 changed files with 46 additions and 10 deletions

2
deps

@ -1 +1 @@
Subproject commit 3b911145d643a54475c8ec1bcdf292589b12f2be
Subproject commit ef801a4d4b09662ac9a9517a4fecac6d18c0a5fd

View File

@ -0,0 +1,13 @@
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
__declspec(dllexport) char* LLVMDemangle(const char* MangledName);
__declspec(dllexport) void LLVMDemangleFree(char* DemangledName);
#ifdef __cplusplus
}
#endif

Binary file not shown.

Binary file not shown.

View File

@ -12,7 +12,7 @@
#include "console.h"
#include "debugger.h"
#include <memory>
#include "symbolundecorator.h"
#include "LLVMDemangle/LLVMDemangle.h"
std::map<Range, std::unique_ptr<MODINFO>, RangeCompare> modinfo;
std::unordered_map<duint, std::string> hashNameMap;
@ -212,7 +212,12 @@ static void ReadExportDirectory(MODINFO & Info, ULONG_PTR FileMapVA)
for(auto & x : Info.exports)
{
if(!x.name.empty())
undecorateName(x.name, x.undecoratedName);
{
auto demangled = LLVMDemangle(x.name.c_str());
if(demangled && x.name.compare(demangled) != 0)
x.undecoratedName = demangled;
LLVMDemangleFree(demangled);
}
}
}
@ -300,7 +305,15 @@ static void ReadImportDirectory(MODINFO & Info, ULONG_PTR FileMapVA)
// undecorate names
for(auto & i : Info.imports)
undecorateName(i.name, i.undecoratedName);
{
if(!i.name.empty())
{
auto demangled = LLVMDemangle(i.name.c_str());
if(demangled && i.name.compare(demangled) != 0)
i.undecoratedName = demangled;
LLVMDemangleFree(demangled);
}
}
}
static void ReadTlsCallbacks(MODINFO & Info, ULONG_PTR FileMapVA)

View File

@ -13,7 +13,7 @@
#include "pdbdiafile.h"
#include "stringutils.h"
#include "console.h"
#include "symbolundecorator.h"
#include "LLVMDemangle/LLVMDemangle.h"
//Taken from: https://msdn.microsoft.com/en-us/library/ms752876(v=vs.85).aspx
class FileStream : public IStream
@ -1028,7 +1028,10 @@ bool PDBDiaFile::convertSymbolInfo(IDiaSymbol* symbol, DiaSymbol_t & symbolInfo,
if(context.collectUndecoratedNames && !symbolInfo.name.empty() && (symbolInfo.name.at(0) == '?' || symbolInfo.name.at(0) == '_' || symbolInfo.name.at(0) == '@'))
{
undecorateName(symbolInfo.name, symbolInfo.undecoratedName);
auto demangled = LLVMDemangle(symbolInfo.name.c_str());
if(demangled && symbolInfo.name.compare(demangled) != 0)
symbolInfo.undecoratedName = demangled;
LLVMDemangleFree(demangled);
}
else
{

View File

@ -217,6 +217,7 @@
<ClInclude Include="jansson\jansson_config.h" />
<ClInclude Include="jansson\jansson_x64dbg.h" />
<ClInclude Include="label.h" />
<ClInclude Include="LLVMDemangle\LLVMDemangle.h" />
<ClInclude Include="loop.h" />
<ClInclude Include="lz4\lz4.h" />
<ClInclude Include="lz4\lz4file.h" />
@ -386,7 +387,7 @@
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll\ntdll_x86.lib;lz4\lz4_x86.lib;jansson\jansson_x86.lib;DeviceNameResolver\DeviceNameResolver_x86.lib;XEDParse\XEDParse_x86.lib;dbghelp\dbghelp_x86.lib;TitanEngine\TitanEngine_x86.lib;ws2_32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>LLVMDemangle\LLVMDemangle_x86.lib;ntdll\ntdll_x86.lib;lz4\lz4_x86.lib;jansson\jansson_x86.lib;DeviceNameResolver\DeviceNameResolver_x86.lib;XEDParse\XEDParse_x86.lib;dbghelp\dbghelp_x86.lib;TitanEngine\TitanEngine_x86.lib;ws2_32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<DelayLoadDLLs>TitanEngine.dll</DelayLoadDLLs>
</Link>
</ItemDefinitionGroup>
@ -408,7 +409,7 @@
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
<OptimizeReferences>false</OptimizeReferences>
<AdditionalDependencies>ntdll\ntdll_x86.lib;lz4\lz4_x86.lib;jansson\jansson_x86.lib;DeviceNameResolver\DeviceNameResolver_x86.lib;XEDParse\XEDParse_x86.lib;dbghelp\dbghelp_x86.lib;TitanEngine\TitanEngine_x86.lib;ws2_32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>LLVMDemangle\LLVMDemangle_x86.lib;ntdll\ntdll_x86.lib;lz4\lz4_x86.lib;jansson\jansson_x86.lib;DeviceNameResolver\DeviceNameResolver_x86.lib;XEDParse\XEDParse_x86.lib;dbghelp\dbghelp_x86.lib;TitanEngine\TitanEngine_x86.lib;ws2_32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<DelayLoadDLLs>TitanEngine.dll</DelayLoadDLLs>
</Link>
</ItemDefinitionGroup>
@ -436,7 +437,7 @@
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ntdll\ntdll_x64.lib;lz4\lz4_x64.lib;jansson\jansson_x64.lib;DeviceNameResolver\DeviceNameResolver_x64.lib;XEDParse\XEDParse_x64.lib;dbghelp\dbghelp_x64.lib;TitanEngine\TitanEngine_x64.lib;ws2_32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>LLVMDemangle\LLVMDemangle_x64.lib;ntdll\ntdll_x64.lib;lz4\lz4_x64.lib;jansson\jansson_x64.lib;DeviceNameResolver\DeviceNameResolver_x64.lib;XEDParse\XEDParse_x64.lib;dbghelp\dbghelp_x64.lib;TitanEngine\TitanEngine_x64.lib;ws2_32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<DelayLoadDLLs>TitanEngine.dll</DelayLoadDLLs>
</Link>
</ItemDefinitionGroup>
@ -461,7 +462,7 @@
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
<OptimizeReferences>false</OptimizeReferences>
<AdditionalDependencies>ntdll\ntdll_x64.lib;lz4\lz4_x64.lib;jansson\jansson_x64.lib;DeviceNameResolver\DeviceNameResolver_x64.lib;XEDParse\XEDParse_x64.lib;dbghelp\dbghelp_x64.lib;TitanEngine\TitanEngine_x64.lib;ws2_32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>LLVMDemangle\LLVMDemangle_x64.lib;ntdll\ntdll_x64.lib;lz4\lz4_x64.lib;jansson\jansson_x64.lib;DeviceNameResolver\DeviceNameResolver_x64.lib;XEDParse\XEDParse_x64.lib;dbghelp\dbghelp_x64.lib;TitanEngine\TitanEngine_x64.lib;ws2_32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<DelayLoadDLLs>TitanEngine.dll</DelayLoadDLLs>
</Link>
</ItemDefinitionGroup>

View File

@ -108,6 +108,9 @@
<Filter Include="Source Files\Third Party\msdia">
<UniqueIdentifier>{dc4f0ea0-8d28-4d9e-a8ac-901dd274787d}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Third Party\LLVMDemangle">
<UniqueIdentifier>{62118289-8fde-487b-b0db-0164e34ce3b4}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
@ -898,5 +901,8 @@
<ClInclude Include="syscalls.h">
<Filter>Header Files\Information</Filter>
</ClInclude>
<ClInclude Include="LLVMDemangle\LLVMDemangle.h">
<Filter>Header Files\Third Party\LLVMDemangle</Filter>
</ClInclude>
</ItemGroup>
</Project>