ryanbevins/Graffito-Decomp

GitHub: ryanbevins/Graffito-Decomp

该项目致力于将 GameCube 游戏《超级马里奥阳光》的原始二进制代码逐字节精确反编译为可读的 C/C++ 源代码,以供逆向工程研究使用。

Stars: 3 | Forks: 0

# Graffito Decomp [![仓库检查](https://static.pigsec.cn/wp-content/uploads/repos/cas/60/60761eb8f76d783ed03c73bd90c6815c474c08a8f579160c251345e57624bff5.svg)](https://github.com/ryanbevins/Graffito-Decomp/actions/workflows/build.yml) [![Lint](https://static.pigsec.cn/wp-content/uploads/repos/cas/73/73ccbf4580efb36d6c888b7f4803d5e82c229071ca2fd1a481dac1a7a20547dc.svg)](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),将此 仓库选为项目目录,然后从侧边栏中选择一个目标文件。 源代码、头文件、配置、拆分和符号的更改会自动重新构建。 ![objdiff 截图](https://static.pigsec.cn/wp-content/uploads/repos/cas/20/20e5d7fae1e70a5678837cab9aaead386264a7a2fa3425840310829e35cb4a1c.png) 命令行辅助工具以适合脚本的形式提供相同的数据: ``` 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, 云资产清单, 反编译, 游戏, 逆向工具, 逆向工程