Null Program

2 篇内容

工程实践Null Program

What's been going on in w64devkit the past year

本文盘点 w64devkit 过去一年的演进,覆盖发布安全、工具链、新工具与运行时。发布侧引入代码签名、GitHub Actions 自动构建和不可篡改发布,签名工具 aas-sign 被 MSYS2 采用;x64 版本改为 multilib,可用 -m32 或 i686-w64-mingw32 前缀工具编译 32 位程序。工具链侧,Binutils 现在按需自动升级到 bigobj COFF,缓解 C++ 大工程链接失败并恢复 cgo,静态运行时从 -Os 改为 -O2。新增 CMake/Ninja、Ccache、quilt、NSIS、zstd、widl 等工具,并重写 C11 threads 实现(基于 SRW 锁,需 Windows 7+,不含递归锁)。未来计划分发 FatLTO 运行时并重新启用 LTO,但作者对 Fortran 运行时错误仍缺乏信心,上游拒收相关补丁。

推荐收录:文章不是简单的新版本通告,而是给出了发布签名与不可篡改发布的具体做法、Binutils bigobj 自动升级的原因与取舍、从 -Os 转向 -O2 的依据,以及 C11 threads 实现中对标准缺陷的批评。对维护 Windows 交叉工具链、构建分发或发布安全的开发者有直接参考价值,其中 LTO 缺陷修复与 FatLTO 设想也可迁移到其他编译器分发场景。

工程实践Null Program

A custom virtual machine for the Stars! 4X game

文章介绍作者为 1995 年的 16 位 Windows 4X 游戏 Stars! 构建 Stars!VM:它内嵌 80286 模拟器和 Win16 到 Win32 桥,使老游戏以原生 Win32 程序运行,并保留现代文件选择器与 4K 缩放。模拟器直接调用宿主 x87 硬件处理 80 位浮点,并用差分模糊测试随机指令与 JIT 结果对比来验证正确性;桥接层负责映射句柄、转换结构布局和处理 DOS 中断。作者还通过 MCP 暴露 UI DOM 与客户机内存,让 AI 代理注入事件甚至完整试玩一局。性能上,基于指令 trace 反向工程热点例程并改写为新 80286 指令,使回合生成约提速 2 倍,同时缓冲 I/O、原生实现 WaveMix.dll、压缩资源,并注入序列号和固定硬件签名绕过拷贝保护。方案依赖 x86/x86-64 与 SSE2,且不实现软件 x87,适用边界较明确。

推荐收录。文章给出一个真实且完整的遗留系统复活案例:从 80286 仿真、Win16/Win32 桥接、差分模糊验证,到 trace 驱动热点优化和 MCP 代理接口,都有具体约束、取舍与验证证据。适合对模拟器、系统编程、逆向工程和遗留软件迁移感兴趣的读者,其中的差分测试、指令级补丁和 I/O 缓冲思路可迁移到其他兼容层或运行时项目。