文档
通过 Ghidra 分析 MIPS ELF
说明 REA 通过 Ghidra 分析 MIPS ELF 可执行文件、可重定位目标文件与 MIPS16 共享镜像的流程,包括为缺少 ABI 记录的旧式固件可执行文件固定 32 位语言,以免 Ghidra 将其按 64 位导入。准入以文件头声明和 ABI 记录为界;验证将项目自有的测试样本与独立的 readelf 输出对照,而不执行或重新托管固件。
使用条件与局限
- 需要使用者自行安装 Ghidra 及兼容的 JDK,并在受支持的 Linux 或 macOS 宿主上运行;Windows 版 Ghidra P0 不接受 MIPS 目标,Hopper/IDA 也不因此获得 MIPS 支持。该流程不执行 MIPS 代码,也不重新托管固件。标准配置接受声明 o32 与 MIPS32r2 的 ELF32 可执行文件和可重定位目标文件;MIPS16 共享镜像另有受限配置。ELF64、n32/n64、microMIPS、特定机型变体、FP64、NAN2008 与 PSP PRX 均被拒绝。
- 已合并的 PR #1898(对应议题 #1620)接受缺少 ABI 记录的旧式 ELF32 可执行文件:文件头为 EF_MIPS_ARCH_32 或 32R2、ABI 字段未指定,且经检查确无 ABI 标志记录。它固定 MIPS:<LE|BE>:32:default,并在导入后核对 Ghidra 报告的语言。o32 被记为分析假设而非声明事实,浮点 ABI 语义仍未验证。
- 可选的真实分析引擎验证流程需自行提供支持 MIPS 目标的 Clang、LLD、GNU readelf 或 MIPS 交叉 binutils,以及 Ghidra。流程以两种字节序构建项目自有的测试样本但不执行,并将指令字节、符号、语言与重定位结果同独立的 readelf 信息对照。指南说明,能生成伪代码或解码结果一致,并不证明运行时、延迟槽或完整浮点语义。
- 议题作者报告曾在四个真实 MIPS32 小端固件 ELF 上检验本地补丁,其函数入口与另行生成的 32 位 Ghidra 导出一致,并报告其中一个镜像在自动选择语言时丢失 5,250 个函数中的 400 个;这些文件未公开。一位 PR 审阅者测试了改写文件头的 OpenWrt 内核与 BusyBox 构建,用 Capstone 交叉核对,且未找到未经改写的公开无记录文件。未确立具体设备型号、固件修改或运行时行为。
- REA 声明 MIT。Ghidra、编译器、binutils 与所分析的固件仍有各自条款,作者结果所用的固件也未提供。本合集审阅了议题、PR 讨论串与固定版本源码,未运行 REA、Ghidra 或任何目标。
关于此条目
- 类型
- 文档
- 类别
- REA 官方:调查指南
- 关联
- REA 官方文档
- 目标
- 二进制 · 固件
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- docs/ghidra-mips.md GitHub · morluto/rea · 修订 c12d9ed
- https://github.com/morluto/rea/issues/1620
- https://github.com/morluto/rea/pull/1898
- scripts/verify-real-ghidra-mips.mjs GitHub · morluto/rea · 修订 c12d9ed
- tests/conformance/ghidra/mips-fixture.mjs GitHub · morluto/rea · 修订 c12d9ed
- src/ghidra/GhidraMipsProfile.ts GitHub · morluto/rea · 修订 c12d9ed
- LICENSE GitHub · morluto/rea · 修订 c12d9ed