chaoticgd/ccc

GitHub: chaoticgd/ccc

一套用于解析 PS2 游戏 STABS 调试符号并生成结构化数据或伪源码的 C++ 工具集。

Stars: 97 | Forks: 10

# Chaos Compiler Collection 一个用于从 PS2 游戏中解析调试符号的库和命令行工具集。1.x 系列版本专注于 .mdebug 节中的 STABS 符号,而 2.x 系列版本也可以解析标准 ELF 符号和 SNDLL 链接器符号。DWARF 支持正在开发中。 - [版本发布](https://github.com/chaoticgd/ccc/releases) - [不稳定构建](https://github.com/chaoticgd/ccc/releases/tag/unstable) ## 工具 ### demangle C++ 符号反修饰器,支持新的 Itanium C++ ABI (GCC 3+) 修饰方案和旧的 GCC 2 方案。 ### objdump 半成品的 EE 核心 MIPS 反汇编器。可能不太有趣。 ### stdump 符号表解析器和转储器。它可以提取以下信息: - 数据类型(结构体、联合体、枚举等) - 函数(名称、返回类型、参数和局部变量) - 全局变量 支持以下输出格式: - C++ - JSON 旨在与 [ghidra-emotionengine-reloaded](https://github.com/chaoticgd/ghidra-emotionengine-reloaded)(>= 2.1.0 或不稳定构建之一)配合使用,以将所有这些信息导入 [Ghidra](https://ghidra-sre.org/)。请注意,尽管有这个名字,STABS 分析器应该适用于 R3000 (IOP),也可能适用于其他 MIPS 处理器。 ### uncc 这类似于 stdump,不同之处在于它将其输出组织成单独的源文件,并具有许多额外功能,旨在尝试使所述输出更接近有效的源代码。必须在输出目录中提供一个 `SOURCES.txt` 文件,该文件可以使用 `stdump files` 命令生成(您应该手动修正路径,使它们相对于输出目录,并删除地址)。此外,不以 `// STATUS: NOT STARTED` 开头的非空文件将不会被覆盖。 如果在输出目录中提供了 `FUNCTIONS.txt` 文件(可以使用包含的 `CCCDecompileAllFunctions.java` Ghidra 脚本生成),则该文件中的代码将用于填充输出中的函数体。在这种情况下, emitted 的第一组局部变量声明将是那些从符号中恢复的,第二组将来自函数文件中提供的代码。函数名称会被反修饰。 全局变量数据将根据其数据类型以结构化方式打印。 数据类型将被分类到相应的文件中。由于此信息不存储在符号表中,uncc 使用启发式方法将类型映射到文件。当类型仅出现在单个翻译单元中时,类型将被放入 `.c` 或 `.cpp` 文件中;当有多个翻译单元时(因此必须使用启发式方法来确定放置位置),则放入 `.h` 文件中。 建议对输出使用代码格式化工具,如 `clang-format` 或 `astyle`。 ## 构建 ``` cmake -B bin/ cmake --build bin/ ``` ## 文档 ### Chaos Compiler Collection - [库概述](docs/LibraryOverview.md) - [编译器 Bug](docs/CompilerBugs.md) - [错误处理](docs/ErrorHandling.md) - [JSON 格式](docs/JsonFormat.md) - [项目结构](docs/ProjectStructure.md) - [符号数据库](docs/SymbolDatabase.md) ### DWARF (.debug) 节 - [DWARF 调试信息格式](https://dwarfstd.org/doc/dwarf_1_1_0.pdf) / [仓库内镜像](docs/mirror/dwarf_1_1_0.pdf) / [archive.org 镜像](https://web.archive.org/web/20230702091554/https://dwarfstd.org/doc/dwarf_1_1_0.pdf) ### MIPS ABI - [MIPS EABI](https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html) / [仓库内镜像](docs/mirror/mips_eabi.txt) / [archive.org 镜像](https://web.archive.org/web/20231222053837/https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html) - [System V 应用程序二进制接口 MIPS RISC 处理器补充](https://refspecs.linuxfoundation.org/elf/mipsabi.pdf) / [仓库内镜像](docs/mirror/mipsabi.pdf) / [archive.org 镜像](https://web.archive.org/web/20240724010702/https://refspecs.linuxfoundation.org/elf/mipsabi.pdf) ### MIPS 调试 (.mdebug) 节 - [Third Eye Software 和 MIPS 符号表 (Peter Rowell)](http://datahedron.com/mips.html) / [仓库内镜像](docs/mirror/ThirdEyeSoftware.html) / [archive.org 镜像](https://web.archive.org/web/20230605005654/http://datahedron.com/mips.html) - [MIPS Mdebug 调试信息 (David Anderson, 1996)](https://www.prevanders.net/Mdebug.ps) / [仓库内镜像](docs/mirror/Mdebug.ps) / [archive.org 镜像](https://web.archive.org/web/20170305060746/https://www.prevanders.net/Mdebug.ps) - MIPS 汇编语言程序员指南,符号表章节 (Silicon Graphics, 1992) / [仓库内镜像](docs/mirror/MIPSProgrammingGuide.pdf) - Tru64 UNIX 目标文件和符号表格式规范,符号表章节 - 版本 5.1 (Compaq Computer Corporation, 2000) / [仓库内镜像](docs/mirror/tru64coff.pdf) - 版本 5.0 (Compaq Computer Corporation, 1999) / [仓库内镜像](docs/mirror/OBJSPEC.PDF) - 来自 gdb 的 `mdebugread.c` (读取) - 来自 gas 的 `ecoff.c` (写入) - 来自 binutils 的 `include/coff/sym.h` (头文件) ### STABS - [调试信息的 "stabs" 表示 (Julia Menapace, Jim Kingdon, 和 David MacKenzie, 1992-???)](https://sourceware.org/gdb/onlinedocs/stabs.html) / 仓库内镜像 ([HTML](docs/mirror/stabs.html), [PDF](docs/mirror/stabs.pdf)) / [archive.org 镜像](https://web.archive.org/web/20230328114854/https://sourceware.org/gdb/onlinedocs/stabs.html/) - 来自 binutils 的 `stabs.c` (读取) - 来自 gdb 的 `stabsread.c` (读取) - 来自 gdb 的 `dbxread.c` (读取) - 来自 gcc 的 `dbxout.c` (写入) - 来自 gcc 的 `stab.def` (符号代码) ## 许可证 CCC 库及相关命令行工具的源代码在 MIT 许可证下发布。 使用了 GNU 反修饰器,其中包含在 GPL 和 LGPL 下许可的源文件。RapidJSON 在 MIT 许可证下使用。GoogleTest 库由测试套件在 3-Clause BSD 许可证下使用。
标签:Bash脚本, C++符号修饰, DWARF, ELF, Emotion Engine, Ghidra, Homebrew安装, Itanium ABI, JSON导出, .mdebug, MIPS, PlayStation 2, PS2, STABS, URL提取, Wayback Machine, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码复原, 反汇编, 反编译, 游戏逆向, 符号表提取, 编译器工具链, 调试符号解析, 逆向工程, 静态分析