ryanbevins/Graffito-Decomp
GitHub: ryanbevins/Graffito-Decomp
该项目致力于将 GameCube 游戏《超级马里奥阳光》的原始二进制代码逐字节精确反编译为可读的 C/C++ 源代码,以供逆向工程研究使用。
Stars: 3 | Forks: 0
# Graffito Decomp
[](https://github.com/ryanbevins/Graffito-Decomp/actions/workflows/build.yml)
[](https://github.com/ryanbevins/Graffito-Decomp/actions/workflows/lint.yml)
Graffito Decomp 是一个正在开发中的、针对《*Super Mario
Sunshine*》的逐字节匹配反编译项目。它的主要目标是 `GMSJ01`(日本修订版 0),使用
原版的 Metrowerks CodeWarrior 编译器(针对 PowerPC/Gekko)。
该项目源自 [doldecomp/sms](https://github.com/doldecomp/sms),并
作为独立的研究工作继续进行。其目标是生成可读的 C 和 C++ 代码,尽可能
精确地重现原始的目标代码,并为任何被归类为功能等价的代码提供
指令级别的证据。
## 项目状态
- `GMSJ01`:活跃且受支持。
- `GMSP01`:保留了配置,但目前不完整,且不是
受支持的构建目标。
- 该仓库正在积极开发中。API、名称、布局和源代码
组织可能会随着恢复出更好的证据而发生改变。
当前的源代码树**不**包含游戏资产、零售二进制文件或
生成的汇编代码。您必须提供自己合法获取的
游戏副本。
## 环境要求
- Python 3
- [Ninja](https://ninja-build.org/)
- 合法获取的受支持游戏光盘镜像
在 x86-64 Linux 上,构建过程会下载并使用
[wibo](https://github.com/decompals/wibo)。其他 Linux 架构需要
Wine。macOS 用户可以使用
[wine-crossover](https://github.com/Gcenx/homebrew-wine)。推荐使用原生 Windows 工具;
不需要 WSL,并且 WSL 会阻止 objdiff 接收
自动的文件系统通知。
## 构建
1. 克隆仓库:
git clone https://github.com/ryanbevins/Graffito-Decomp.git
cd Graffito-Decomp
2. 将您的游戏光盘镜像复制到 `orig/GMSJ01/` 中。
支持的输入格式包括 ISO/GCM、RVZ、WIA、WBFS、CISO、NFS、GCZ
和 TGC。初次提取成功后,可以将光盘镜像从
项目目录中删除。
3. 配置并构建:
python configure.py
ninja
使用 `python configure.py --help` 获取版本和工具链覆盖选项。如果要构建
当前的功能等价源代码集,而不仅仅是构建逐字节匹配的
目标文件,请在运行 Ninja 之前使用 `--non-matching` 进行配置。
## 差异对比
首次成功构建后,会在仓库
根目录下生成 `objdiff.json`。安装 [objdiff](https://github.com/encounter/objdiff),将此
仓库选为项目目录,然后从侧边栏中选择一个目标文件。
源代码、头文件、配置、拆分和符号的更改会自动重新构建。

命令行辅助工具以适合脚本的形式提供相同的数据:
```
python tools/decomp-diff.py -u mario/Enemy/bombhei
python tools/decomp-diff.py -u mario/Enemy/bombhei -d "TBombHei::perform"
```
有关其他仓库实用工具,请参阅 [tools/README.md](tools/README.md)。
## 仓库结构
- `src/`:反编译的 C 和 C++ 实现
- `include/`:声明、内联函数和重构的类型
- `config/`:decomp-toolkit 拆分、符号、哈希和版本配置
- `tools/`:构建、差异对比、审计和调查辅助工具
- `docs/`:逆向工程笔记和严格等价审计记录
- `orig/`:本地游戏输入;被 Git 忽略
- `build/`:生成的构建输出;被 Git 忽略
## 传承
Graffito Decomp 最初基于
[doldecomp/sms](https://github.com/doldecomp/sms)。可以通过将该仓库添加为远程仓库来
查看上游更改:
```
git remote add upstream https://github.com/doldecomp/sms.git
git fetch upstream
```
感谢 doldecomp 社区以及每一位贡献者,是你们的工作使这个
项目成为可能。
## 许可证与法律声明
项目编写的代码和文档基于
[CC0 1.0 Universal 奉献](LICENSE) 提供。
《*Super Mario Sunshine*》、Nintendo、GameCube 以及相关名称和资产均为
其各自所有者的财产。这是一个非官方的研究项目,
不隶属于 Nintendo,也未获得其认可。
标签:C/C++, PowerPC, URL提取, 事务性I/O, 云资产清单, 反编译, 游戏, 逆向工具, 逆向工程