1
0
Fork 0

Fixed Symbol::GetList() for symbols without undecorated name

* Such symbols have "" instead of nullptr in SYMBOLINFO.undecoratedSymbol
* This fix greatly improves Snowman's decompiled results, example: comctl32!ListBox_SetCurSelHandler
This commit is contained in:
Alexander Miloslavskiy 2018-11-01 23:02:48 +01:00 committed by Duncan Ogilvie
parent 836a544287
commit 0adb663a91
1 changed files with 4 additions and 1 deletions

View File

@ -16,10 +16,13 @@ static bool cbSymbolEnum(const SYMBOLPTR* ptr, void* user)
SYMBOLINFO info;
DbgGetSymbolInfo(ptr, &info);
const bool hasUndecoratedName = (0 != info.undecoratedSymbol) && (0 != info.undecoratedSymbol[0]);
const char* symbolName = hasUndecoratedName ? info.undecoratedSymbol : info.decoratedSymbol;
SymbolInfo symbol = {};
strncpy_s(symbol.mod, sizeof(symbol.mod), ctx->module->name, sizeof(symbol.mod) - 1);
symbol.rva = info.addr - ctx->module->base;
strncpy_s(symbol.name, sizeof(symbol.name), info.undecoratedSymbol ? info.undecoratedSymbol : info.decoratedSymbol, sizeof(symbol.name) - 1);
strncpy_s(symbol.name, sizeof(symbol.name), symbolName, sizeof(symbol.name) - 1);
symbol.manual = false;
switch(info.type)
{