Я пытаюсь улучшить библиотеку SymbolSort , которая читает файлы PDB с помощью DIA SDK.Мне нужно сопоставить символы, считываемые из объектных файлов, с символами, считанными из PDB.
Вопрос в том, что, учитывая переменную IDiaSymbol
, как я могу получить ее настоящее имя?Я не заинтересован в неукрашенном или читаемом человеком имени, мне нужно искаженное имя, точно такое, как оно появляется в объектном файле, именно так, как его видит компоновщик.
Неокрашенное имя можно легко получить с помощью IDiaSymbol::get_undecoratedName
( ref ).Для оформленного имени я использую следующий код:
string rawName;
IDiaSymbolUndecoratedNameExFlags flags = Flags.UNDNAME_32_BIT_DECODE | Flags.UNDNAME_TYPE_ONLY;
diaSymbol.get_undecoratedNameEx((uint)flags, out rawName);
Опытным путем было обнаружено, что этот хак, похоже, работает хорошо в большинстве случаев (без причины).Но иногда это приводит к некоторому мусору, например:
diaSymbol.undecoratedName:
"private: bool __cdecl idPhysics_Player::SlideMove(bool,bool,bool,bool) __ptr64"
rawSymbol:
" ?? :: ?? ::Z::_N_N000 & __ptr64 volatile "