BitKindle:从 3584 字节机器码种子,一路自举出 Windows C 编译器和链接器
zovo2026-10-22约 3 分钟读完
安全研究者 tombkeeper 开源了 BitKindle,一套在 Windows x64 上从零自举的 C 工具链。起点只是一段 3584 字节的十六进制机器码种子,构建时不需要 MSVC、GCC、Clang、Windows SDK 或外部链接器。它更像一个可以完整复现的编译器自举实验,而不是日常开发工具。
01它是什么
按项目 README,仓库包含 A0/A1 两级装配器、过渡用的 C0 编译器、用 C 写成并能编译自己的 C1 编译器、运行库和 PE 链接器的全部源码。构建时由 PowerShell 5.1 把种子解码成第一个程序,此后所有机器码、目标文件和 EXE 都由前一级自己造出的工具生成。
02自举链怎么走
- A0:种子解码出的最小装配器,只认十六进制字节、数字标签和地址,再用自身源码重新装配并要求结果逐字节一致。
- A1:增加具名标签、字符串和一小组 x64 助记符,同样自己装配自己。
- C0:用 A1 写的 C 子集编译器,只实现构建下一级所需的部分。
- C1:用 C 写成的编译器,经过桥接、标识符、目标文件(.c1o)等几轮扩展;最终编译自身两代,要求第一代和第二代产物逐字节相同。
- 自制 PE 链接器:把编译器和运行库链接成 Windows 可执行文件。
官方在 BOOTSTRAP 文档里说明了各级依赖关系,并提醒:自编译一致和功能测试不等于正确性证明,也不是标准认证。
03能编译什么
支持 C89 和不少 C99 特性(变长数组、复数运算、复合字面量、指定初始化器、可变参数宏、long long 等),但官方明确不声称完整符合 C99,long double 按 binary64 处理,也不兼容通用 Windows SDK 头文件和 COFF .obj/.lib,现有开源 C 项目可能需要改写。仓库自带三个示例:hello、通过系统 WinHTTP 访问网络的 minicurl,以及一个超级马里奥第一关的教学性复刻。
04使用条件
- 只支持 Windows x64 和 Windows PowerShell 5.1,官方验证环境为 Windows 10 x64。
- 源码放在路径较短、可写的本地目录,完整测试预留 5 GiB 空间。
- 默认构建不跑回归测试;加 -All 会额外编译示例,加 -Full 才跑完整测试,二者互斥。
- 构建命令(来自 README,本站未实际运行,因为沙箱不是 Windows):powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -File .\build-all.ps1。
- 许可证为 MIT;Windows、PowerShell 和系统 DLL 不属于项目源码。
提示做编译原理教学、研究可信构建(trusting trust)或想看一条完整自举链的人最适合;想找生产级 C 编译器的话,这个项目的覆盖范围还不够。
05资料来源
资料来源(2026-10-22 核对)
本文由 zovo 编辑撰写,转载请注明出处。


DeepSeek
Claude Code
Timestral