Windows 垫片
Windows 是三条路径里最难的一条,原因只有一个:它的 syscall 编号不透明、随版本变化。Linux 可以直接映射编号,Windows 不能——必须停在 ntdll 这一层做翻译。
SHIM_TABLE 的分布
| DLL | 条数 | 说明 |
|---|---|---|
| msvcrt | 45 | 最多——C 运行时的字符串 / 内存 / 格式化函数是几乎所有程序都需要的。 |
| kernel32 | 40 | 文件、句柄、进程与线程的基础面。 |
| gdi32 | 10 | 绘制原语,够画基本图形。 |
| user32 | 2 | 只有 2 条。这是整张表里最刺眼的数字,下面单说。 |
user32 只有 2 条意味着什么:
任何带真实窗口的 Windows 程序都跑不到底。窗口创建、消息循环、控件——这些全在 user32 上。所以“Windows 程序能跑”这句话目前只对无界面的控制台程序成立。这条限制写在缺口的第二条,而不是藏在测试结果后面。
盒桥:把 Windows 应用也纳入监督
垫片让 Windows 二进制能加载;盒桥是另一件事——让模型隔着进程边界驱动宿主上的 GUI 应用(COM Excel/Word、certutil、notepad 一类)。因为谓词指向的是 Windows 特有对象,它被划在宿主扩展层,不参与核心契约的差分。见 AI 层 · 盒桥。
加固计划:
C02(PE 装载器深度:SEH / TLS 回调 / 延迟导入)、C03(kernel32 40→70 并起步 ntdll)、C04(真实 CRT)、C05(LoadLibraryA 真实映射)——见 C01–C15。