#pdb #symbols #kernel #kernel-module #windows #crash-dump

app symbolizer-rs

一个适用于 Windows 的快速执行跟踪符号化工具,可在所有主要平台上运行,且不依赖于任何 Microsoft 库

1 个不稳定版本

0.1.0 2024 年 5 月 5 日

#294 in 命令行工具

MIT 许可证

100KB
2K SLoC

symbolizer-rs

一个适用于 Windows 的快速执行跟踪符号化工具,可在所有主要平台上运行,且不依赖于任何 Microsoft 库。

概述

symbolizer-rssymbolizer 的继任者:它更快、更好,且在所有主要平台上运行。

它不依赖于 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+offsetmodoff) 跟踪,以便将其加载到 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 选项的输出目录来打开批量模式。

Batch mode

单文件模式

与批量模式相反,您可以通过指定通过 --trace 命令行选项的跟踪文件路径来表示单个跟踪文件。

Single mode

使用方法

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')

作者

贡献者

contributors-img

依赖项

~12–21MB
~401K SLoC