th08:東方永夜抄 byte-perfect 反编译
th08 是社区在做的东方 decomp 项目 把《東方永夜抄 ~ Imperishable Night》1.00d 从二进制一点点抠回源码。这不是我写的 我 fork 过来自己编一遍对照着看。项目自己标着 highly WIP 还很早期 我当活教材读 不指望它现在完整。仓库在 https://github.com/dwgx/th08。
matching decomp 跟“反编译出个能跑的近似版”是两码事 目标是重编出来的二进制跟原版逐字节对上。你不光要写功能等价的 C++ 还得让编译器排局部变量、生成指令的方式都跟原版一致。抠的就是这层底。
所以构建环境不能用现代工具链 得还原当年那套 Visual Studio 2002 加 DirectX 8.0 全是从 Web Archive 捞回来的老物件 byte-perfect 没得挑 只能用原作者同一把编译器。build 脚本用 Python 写 跑一下生成 build.ninja 再交给 ninja。Linux/mac 上靠 wine 跑这套老工具链 macOS 据说 CrossOver 更稳 能躲开 CL.EXE 的堆问题。
自己编先弄到原版 th08.exe 1.00d 项目用 SHA256 校验版本 版本不对比对全乱。exe 放进 resources/ 跑 python scripts/create_devenv.py 拉齐编译器和库 再 python3 ./scripts/build.py 出重编二进制。
核心是比对 用 isledecomp 的 reccmp。先 reccmp-project detect 认出原版和重编版 再 reccmp-reccmp --target th08 --html report.html 出准确度报告 直接告诉你哪个函数对上了 哪个还差着 每对上一个函数进度往前挪一格。
还有个细节 为了在老 MSVC7 上控制局部变量排布 @EstexNT 专门移植了个 var_order pragma。这种为对齐编译器行为造的小工具 最能说明 matching decomp 抠到什么程度。