# 《幻影沙漏》：早期阶段的 Nintendo DS 一致性反编译

> 通过手工反编译，为《塞尔达传说 幻影沙漏》的欧版与美版 Nintendo DS 重建 C++ 源码：借助 dsd 工具集从使用者自备的 ROM 中拆分代码，再重新构建 ROM。objdiff 逐个函数跟踪匹配情况，默认构建会将输出 ROM 与仓库保存的 SHA-1 比对。项目仍处于早期阶段：decomp.dev 报告所审提交有 2.82% 的代码已匹配。

- 类型：案例
- 目标：游戏
- 类别：独立重建案例
- 关联：独立重建项目
- 来源复核于：2026-10-19
- 收录于：2026-10-27
- 原始资源：<https://github.com/zeldaret/ph>
- 一手来源：<https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/README.md>
- 目录页面：<https://awesomerea.org/zh/resources/phantom-hourglass-ds-decomp-case/>
- 记录 JSON：<https://awesomerea.org/resources/phantom-hourglass-ds-decomp-case/record.json>
- 英文版：[English](https://awesomerea.org/resources/phantom-hourglass-ds-decomp-case/index.md)

## 使用条件与局限

- README 标明项目仍在进行中，目标为欧版和美版，其他版本日后可能支持；configure.py 接受 eur 或 usa。反编译范围是 ARM9 程序及其 TCM 模块和覆盖层，docs/build_system.md 说明 ARM7 程序不在反编译之列。产物是 Nintendo DS ROM，不是 PC 移植。
- 需为每个版本将自己的已解密基础 ROM 以 baserom_ph_eur.nds 或 baserom_ph_usa.nds 放入 extract/，并与 extract/README.md 所列 SHA-1 一致；随后由 dsd 在本地从中提取代码和素材。INSTALL.md 称逐字节一致的 ROM 是可选项，要生成它还需使用者自己的 DS ARM7 BIOS 文件，且须与所列两个 SHA-1 之一相符。README 称仓库不含素材或汇编；不过 config/ 提交了源自游戏的 dsd 拆分、符号与重定位表，每个版本 65 个模块。
- INSTALL.md 列出的平台为 Windows（推荐）或 Linux，需 Python 3.11+ 与 pip、GCC 9+、Ninja 以及 pre-commit 钩子；在 Linux 上默认通过 wibo 运行 Windows 编译器，也可改用 Wine。configure.py 从 GitHub 发行版下载 dsd v0.11.0、objdiff v3.4.0、sjiswrap v1.2.2 和 wibo 0.6.16，并从 decomp.aetias.com 下载 Metrowerks mwccarm 编译器包（使用其中的 2.0/sp1p5 版本）。
- 默认 ninja 目标会生成 objdiff 数据、运行 dsd 的模块与符号检查，并将构建出的 ROM 与 ph_eur.sha1 或 ph_usa.sha1 比对。CI 在提供提取文件和编译器的构建容器中构建两个版本，执行 ARM9 链接、objdiff 报告和各项检查，但不校验 ROM 哈希。decomp.dev 针对该固定提交的默认 usa 报告显示，3,622,306 个代码字节中有 102,202 个（2.82%）、24,610 个函数中有 1,351 个已匹配，190 个单元中有 28 个已完成。
- 仓库采用 CC0-1.0；该声明不涵盖任天堂的游戏及其提取文件、BIOS 或下载的 Metrowerks 编译器。

## 一手来源

1. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/README.md>
2. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/INSTALL.md>
3. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/extract/README.md>
4. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/docs/build_system.md>
5. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/tools/configure.py>
6. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/tools/download_tool.py>
7. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/ph_usa.sha1>
8. <https://github.com/zeldaret/ph/tree/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/config>
9. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/.github/workflows/build.yml>
10. <https://github.com/zeldaret/ph/blob/f0799bd6038be6858499ec68f0d03cdbbfa53d0b/LICENSE>
11. <https://decomp.dev/zeldaret/ph>

## 同分区更多条目：游戏

- [《皮克敏2》：覆盖五个版本、已完全匹配的 GameCube 反编译](https://awesomerea.org/zh/resources/pikmin-2-matching-decomp-case/index.md) · 案例
- [pokecrystal：一致构建的《精灵宝可梦 水晶》反汇编](https://awesomerea.org/zh/resources/pokecrystal-disassembly-case/index.md) · 案例
- [pokered：一致构建的《精灵宝可梦 红／蓝》反汇编](https://awesomerea.org/zh/resources/pokered-disassembly-case/index.md) · 案例
- [pokeruby：一致构建的《精灵宝可梦 红宝石／蓝宝石》反编译](https://awesomerea.org/zh/resources/pokeruby-decomp-case/index.md) · 案例
- [《宝可梦 绿宝石》：生成一致 ROM 的 Game Boy Advance 反编译重建](https://awesomerea.org/zh/resources/pokemon-emerald-decomp-case/index.md) · 案例
- [《宝可梦 火红／叶绿》：生成一致 ROM 的 Game Boy Advance 反编译重建](https://awesomerea.org/zh/resources/pokemon-firered-leafgreen-decomp-case/index.md) · 案例

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
