1 个不稳定版本
0.1.0 | 2024 年 5 月 5 日 |
---|
#294 in 命令行工具
100KB
2K SLoC
symbolizer-rs
一个适用于 Windows 的快速执行跟踪符号化工具,可在所有主要平台上运行,且不依赖于任何 Microsoft 库。
概述
symbolizer-rs 是 symbolizer 的继任者:它更快、更好,且在所有主要平台上运行。
它不依赖于 dbgeng,也不像 symbolizer 那样依赖于 Microsoft 的 dbgeng 来下载和解析 PDB 符号(归功于 pdb crate)。
symbolizer-rs 允许您将原始执行跟踪(例如 0xfffff8053b9ca5c0
)转换为符号化跟踪(例如 nt!KiPageFault+0x0
)。为了能够做到这一点,它需要一个包含用户/内核模块列表以及它们的 PE 标头的内核崩溃转储,以便从 Microsoft 或任何其他符号服务器下载必要的 PDB 信息。这个工具最初是为与 what the fuzz 快照模糊器配合使用而制作的,但也可以由任何类似工具使用。
以下是原始执行跟踪的一个示例...
0xfffff8053b9ca5c0
0xfffff8053b9ca5c1
0xfffff8053b9ca5c8
0xfffff8053b9ca5d0
0xfffff8053b9ca5d4
0xfffff8053b9ca5d8
0xfffff8053b9ca5dc
0xfffff8053b9ca5e0
...转换为完整的符号化跟踪
ntoskrnl.exe!KiPageFault+0x0
ntoskrnl.exe!KiPageFault+0x1
ntoskrnl.exe!KiPageFault+0x8
ntoskrnl.exe!KiPageFault+0x10
ntoskrnl.exe!KiPageFault+0x14
ntoskrnl.exe!KiPageFault+0x18
ntoskrnl.exe!KiPageFault+0x1c
ntoskrnl.exe!KiPageFault+0x20
或转换为 mod+offset
(modoff) 跟踪,以便将其加载到 Lighthouse 以进行代码覆盖率探索
ntoskrnl.exe+0x1ca5c0
ntoskrnl.exe+0x1ca5c1
ntoskrnl.exe+0x1ca5c8
ntoskrnl.exe+0x1ca5d0
ntoskrnl.exe+0x1ca5d4
ntoskrnl.exe+0x1ca5d8
ntoskrnl.exe+0x1ca5dc
ntoskrnl.exe+0x1ca5e0
ntoskrnl.exe+0x1ca5e4
ntoskrnl.exe+0x1ca5e8
安装
cargo安装 symbolizer-rs
- 通过克隆仓库并使用以下命令自行构建:
git clone https://github.com/0vercl0k/symbolizer-rs.git
,然后使用cargo build --release
构建。 - 在 发布 部分中提供了预构建的二进制文件
批处理模式
批量模式旨在表示一个包含执行跟踪的整个目录。您可以通过指定用于 --trace
命令行选项的目录以及用于 --output
选项的输出目录来打开批量模式。
单文件模式
与批量模式相反,您可以通过指定通过 --trace
命令行选项的跟踪文件路径来表示单个跟踪文件。
使用方法
A fast execution trace symbolizer for Windows.
Usage: symbolizer-rs.exe [OPTIONS] --trace <TRACE>
Options:
-t, --trace <TRACE>
Directory path full of traces or single input trace file
-o, --output <OUTPUT>
Output directory where to write symbolized traces, a path to an output file, or empty for the output to go on stdout
-c, --crash-dump <CRASH_DUMP>
Path to the crash-dump to load. If not specified, an attempt is made to find a 'state/mem.dmp' file in the same directory than the trace file
-s, --skip <SKIP>
Skip a number of lines
[default: 0]
-m, --max <MAX>
The maximum amount of lines to process per file
[default: 20000000]
--style <STYLE>
The symbolization style (mod+offset or mod!f+offset)
[default: full]
Possible values:
- modoff: Module + offset style like `foo.dll+0x11`
- full: Full symbol style like `foo.dll!func+0x11`
--overwrite
Overwrite the output files if they exist
--line-numbers
Include line numbers in the symbolized output
--symsrv <SYMSRV>
Symbol servers to use to download PDBs; you can provide more than one
[default: https://msdl.microsoft.com/download/symbols/]
--sympath <SYMPATH>
Specify a symbol path. If not specified, _NT_SYMBOL_PATH will be parsed if present
--out-buffer-size <OUT_BUFFER_SIZE>
The size in bytes of the buffer used to write data into the output files
[default: 3145728]
--in-buffer-size <IN_BUFFER_SIZE>
The size in bytes of the buffer used to read data from the input files
[default: 1048576]
-h, --help
Print help (see a summary with '-h')
作者
- Axel '0vercl0k' Souchet
贡献者
依赖项
~12–21MB
~401K SLoC