ajsb85/esp32-p4-decompiler-plugin
GitHub: ajsb85/esp32-p4-decompiler-plugin
为 Ghidra 提供ESP32-P4 RISC-V 微控制器的一等公民支持,包含完整 ISA 定义、外设映射和符号加载等功能,解决该芯片固件逆向分析缺少专用工具的问题。
Stars: 1 | Forks: 0
# ESP32-P4 Ghidra 插件
[](LICENSE)
[](https://ghidra-sre.org)
[](https://riscv.org)
[](https://adoptium.net)
Ghidra 扩展,为 **ESP32-P4** RISC-V 微控制器提供一等公民支持。
提供自定义 Sleigh 处理器定义,涵盖完整的
ISA (RV32IMAFC + Zicsr + Zifencei + Zmmul + Zaamo + Zalrsc + Zca + Zcf
+ xesploop + xespv2p2)、来自官方 SVD 的外设内存映射标记、
ROM 符号加载以及 ESP-IDF FIDB 函数识别。
## 功能
- **Sleigh 处理器定义** — 完整的 ESP32-P4 ISA,包括 xesploop
硬件循环和 xespv2p2 PIE SIMD(已在 P4 eco2 上确认)
- **编译器规范** — 针对ilp32f ABI (FLEN=4,
仅单精度浮点数) 优化的 `esp32p4.cspec`
- **SVD 外设映射** — 通过 `LoadESP32P4SVD.java` 从 `esp32p4.svd`
标记所有 89 个外设
- **ROM 符号加载器** — `LoadESP32P4RomSymbols.java` 从
`esp32p4_rev0_rom.elf` 导入函数名称
- **FIDB 生成器** — 用于构建
ESP-IDF 函数 ID 数据库的 `GenerateESP32P4FIDB.java` 指导脚本
- **Headless 分析** — 用于
CI/批处理工作流的 `AnalyzeESP32P4Headless.py` 预脚本
## 依赖要求
| 依赖 | 版本 |
|------------|---------|
| Ghidra | 12.1.2 或更高版本 |
| Java | 21 或更高版本 |
| Gradle | 8+ (包含 wrapper) |
| esp32p4.svd | 可选 — 来自 Espressif SDK |
| esp32p4_rev0_rom.elf | 可选 — 来自 Espressif SDK |
## 安装说明
### 从发布 ZIP 安装
1. 从
[Releases](https://github.com/ajsb85/esp32-p4-decompiler-plugin/releases) 下载 `ghidra_12.1.2_PUBLIC_*_esp32p4-ghidra-plugin.zip`
2. 在 Ghidra 中:**File → Install Extensions** → 选择该 ZIP → 重启
### 从源码构建
```
git clone https://github.com/ajsb85/esp32-p4-decompiler-plugin.git
cd esp32-p4-decompiler-plugin
gradle -PGHIDRA_INSTALL_DIR=/opt/ghidra_12.1.2_PUBLIC buildExtension
```
通过 **File → Install Extensions** 安装 `dist/` 中的 ZIP。
## 快速开始
1. 安装扩展(见上文)并重启 Ghidra
2. **File → Import File** → 选择你的 ELF →
**Options → Language** → `RISCV:LE:32:ESP32-P4` → OK
3. 运行自动分析(**Analysis → Auto Analyze**)
4. _(可选)_ **Window → Script Manager** → 运行 `LoadESP32P4SVD.java`,
指定你的 `esp32p4.svd`
5. _(可选)_ 运行 `LoadESP32P4RomSymbols.java`,
指定 `esp32p4_rev0_rom.elf`
### Headless 分析
```
analyzeHeadless /tmp/proj MyProject \
-import firmware.elf \
-processor "RISCV:LE:32:ESP32-P4" \
-preScript AnalyzeESP32P4Headless.py
```
## ISA 支持
| 扩展 | 描述 | 状态 |
|-----------|-------------|--------|
| RV32IMAFC | 基础 + 乘法 + 原子 + 浮点 | Full |
| Zicsr / Zifencei | CSR 访问 / fence | Full |
| Zca / Zcf | 压缩基础 / 浮点 | Full |
| xesploop | 硬件循环 (custom-1, 0x2B) | Full |
| xespv2p2 | PIE SIMD 加载/存储 (操作码 0x1F) | Partial |
| xespv2p2 | PIE SIMD 算术 (操作码 0x1B) | Partial |
### PIE SIMD — 在 ESP32-P4 eco2 上已确认的操作
通过 [FastLED #2535](https://github.com/FastLED/FastLED/issues/2535)
和 [#2536](https://github.com/FastLED/FastLED/issues/2536) 验证:
`vld.128.ip` · `vst.128.ip` · `andq` · `orq` · `xorq` · `notq` ·
`zero.q` · `movi.32.q` · `vcmp.eq.s8` · `vunzip.8` · `vsl.32` ·
`vsr.u32` · `slci.2q` · `srci.2q` · `src.q.qup` · `cmul.s16`
未确认的操作将直接由通用的 `esp.pie.arith` / `esp.pie.0x1f`
pcodeops 处理,并且仍会被反汇编,不会导致反编译器崩溃。
## 项目结构
```
data/languages/ Sleigh processor definition (slaspec, sinc, cspec, ldefs)
ghidra_scripts/ Runnable Ghidra scripts (SVD loader, ROM symbols, FIDB)
src/main/java/ Plugin Java source (analyzer, memory map, UI panel)
dist/ Built extension ZIP ← git-ignored, produced by Gradle
```
## 许可证
Apache 2.0 — 见 [LICENSE](LICENSE)。
上游 Sleigh 文件(`riscv.*.sinc`, `andestar_v5.instr.sinc`)源自
[Ghidra](https://github.com/NationalSecurityAgency/ghidra) 项目
(NSA) 并在相同的 Apache 2.0 许可证下重新分发。
**作者:** Alexander Salas Bastidas <ajsb85@firechip.dev>
标签:ESP32, Ghidra插件, JS文件枚举, RISC-V, Sleigh, 云资产清单, 后台面板检测, 固件分析, 域名枚举, 嵌入式系统, 逆向工具, 逆向工程