【发布时间】:2018-05-20 14:43:51
【问题描述】:
我正在尝试改进SymbolSort 库,该库使用 DIA SDK 读取 PDB 文件。我需要将从目标文件中读取的符号与从 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);
根据经验发现,这种 hack 在大多数情况下似乎都能正常工作(无缘无故)。但有时它会产生一些垃圾,例如:
diaSymbol.undecoratedName:
"private: bool __cdecl idPhysics_Player::SlideMove(bool,bool,bool,bool) __ptr64"
rawSymbol:
" ?? :: ?? ::Z::_N_N000 & __ptr64 volatile "
【问题讨论】:
标签: c# debug-symbols pdb-files dia-sdk