用 Rust 从零手写一个 Windows 调试器

Writing a Debugger from Scratch

我曾两次离开 Microsoft Debugger Platform 团队,每次离开后都忍不住重新写一个调试器。这次我选择用 Rust 从零开始构建 DbgRs,既是为了深入掌握 Rust 语言,也是为了让调试器的工作原理更易于理解。文章将带你从最基础的 Windows API 入手,通过 DebugActiveProcess 和 CreateProcessW 实现进程附加,利用 WaitForDebugEventEx 和 ContinueDebugEvent 构建核心的事件循环。虽然 Rust 代码细节不多,但核心概念和 API 逻辑适用于任何语言。我们将避开 DbgEng 等高级接口,专注于操作系统提供的底层调试机制,让你真正理解调试器如何挂起、检查和恢复目标进程。

我两次离开了 Microsoft Debugger Platform 团队,而每次离开后,我都开始编写自己的调试器。
  1. Cieric

    我觉得有必要提一下,因为我之前漏掉了。这篇帖子是 2023 年 2 月 13 日发布的。到目前为止,他关于这个主题已经写了 8 篇帖子,但主帖里并没有链接到它们。我觉得把所有链接都放上来可能有点多,不过目前它们都列在他的主页上 [1]。

    [1] https://www.timdbg.com/

  2. scott01

    No Starch 出版社有一本相关的书,强烈推荐。作者还有一系列关于这个话题的博客文章。

    https://nostarch.com/building-a-debugger

  3. whartung

    关于开发调试器,我有个朋友讲过一个特别喜欢的故事。

    当时他们正在为 OS/2 开发调试器,而 OS/2 在当时因支持多任务处理而闻名。

    到了某个阶段,他们实现了足够多的基础功能,以至于可以用这个调试器来调试它自己。也就是“调试调试器”。

    在调试调试器的时候,他们不可避免地会遇到调试器本身的其他 bug。

    所以,在 OS/2 上,当他们能够调试“正在调试调试器的调试器”时,他们突然有了点顿悟的感觉。

同日更多故事

2026-07-24