从符号中部分删除类型信息

Removing type information from symbols partly

我们最近了解到,Microsoft has stripped type information from symbols 在某些版本的 ntdll 中。

假设我有一个库的源代码,我想发布 public 符号,但从该 PDB 中删除了一些类型定义,我将如何在技术上实现这一点,尤其是在不破坏 PDB 身份信息的情况下(时间戳和校验和)?

我在联机文档中找不到 compiler switch 允许我传递要排除的类型列表。

请注意,我不想从私有符号切换到 public 个符号,而是减少 public 个符号。

WinDbg 附带一个名为 PDBCopy 的工具。 -f 命令行开关允许过滤 public 符号:

C:\Program Files\Windows Kits\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 开始就存在。 -a 开关已添加到 WinDbg 6.12。