我们最近了解到ntdll
的某些版本中的Microsoft has stripped type information from symbols。
想象一下,我有一个库的源代码,我想发布公共符号,但从该PDB中删除一些类型定义,我将如何在技术上实现这一点,特别是在不破坏PDB身份信息(时间戳和校验和)的情况下?
我在在线文档中找不到允许我传递要排除的类型列表的compiler switch。
请注意,我不想从私有符号切换到公共符号,而是减少公共符号。
答案 0 :(得分:1)
WinDbg附带了一个名为PDBCopy
的工具。 -f
命令行开关允许过滤公共符号:
C:\Program Files\Windows Kits\10\Debuggers\x64>pdbcopy /?
PDBCopy v12.00.30523
usage: PDBCopy <source_pdb> <destination_pdb> [-p] [-s] [-f] [-F] [-a] [-A] [-?]
[-p] remove private debug information
[-s] create new signature
[-f:{@file|symbol}] filter specific public symbols out of stripped pdb
[-F:{@file|symbol}] leave only specific public symbols in stripped pdb
[-a] leave all annotation symbols in stripped pdb
[-a:{@file|symbol}] filter specific annotation symbols out of stripped pdb
[-A:{@file|symbol}] leave only specific annotation symbols in stripped pdb
[-?] display this message
这至少存在于WinDbg 6.8之后。 WinDbg 6.12中添加了-a
个开关。