#pdb #manifest #offline #generate #download #manifest-file #symchk

app pblist器

为离线机器生成 PDB 清单的 symchk 的更快版本

3 个版本

0.0.3 2024 年 3 月 9 日
0.0.2 2022 年 11 月 14 日
0.0.1 2022 年 10 月 6 日

#184调试

Download history • Rust 包仓库 31/week @ 2024-03-28 • Rust 包仓库 10/week @ 2024-04-04 • Rust 包仓库 1/week @ 2024-05-30 • Rust 包仓库 1/week @ 2024-06-06 • Rust 包仓库

84 每月下载量

自定义许可证

5.5MB
1K SLoC

摘要

这是一个小巧的 非官方 项目,旨在作为 symchk 的快速替代品,用于各种任务,如生成清单和下载符号。它模仿 symchk 的形式 symchk /om,但只查找 MZ/PE 文件。

由于 symchk 做了一些奇怪的事情,它通常会崩溃或陷入无限循环。因此,这是一个更严格(并且更快)的替代品。

输出的清单与 symchk 兼容。如果您想用 symchk 替代此工具,请使用 symchk /im

⚠️ 注意:此工具是 不稳定的!CLI 接口可能会随时更改,不会警告。如果您需要程序稳定性(例如,用于自动化),请将您的安装锁定到特定版本。

看看这个工具有多快:

快速入门

# On your target
> cargo run --release -- manifest C:\Windows\System32

# On an online machine
> cargo run --release -- download SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols

下载单个 PDB 文件

> cargo run --release -- download_single SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols C:\Windows\System32\notepad.exe

未来

随机化清单中文件顺序可以使下载更加一致,因为没有文件系统局部性偏差。

在清单中去重文件也有助于,但这并不是什么大问题 耸肩

我们可以提供 symchk 兼容的子命令: #5

可以实施“服务器模式”,以便其他不同语言编写的工具可以利用我们的功能: #7

性能

此工具会尝试在内存中完成所有操作。首先列出所有文件,然后进行所有解析(这涉及到对文件的无映射随机访问,因此可以改进,但这似乎并不是一个问题,这种随机访问仅当它看到MZ和PE头信息且所有信息有效时才会发生)。

它还在内存中生成清单并在一次操作中将其导出,这是原始symchk的一个大瓶颈。

然后对于下载,它异步地处理清单文件,最多同时处理16个文件!原始的symchk网络使用率仅达到约3-4 Mbps,但这个工具使我的互联网连接达到400 Mbps。

依赖项

约10-23MB
约345K SLoC