VIRUXE/ghidra-oki66207

GitHub: VIRUXE/ghidra-oki66207

一个 Ghidra 处理器模块,为 OKI 66201/66207/66301 16 位 MCU(本田 OBD1 ECU)提供完整的反汇编与交叉引用支持。

Stars: 1 | Forks: 0

# ghidra-oki66207 一个用于 **OKI 66201 / 66207 / 66301** (nX-8/200) 16 位 MCU 系列(用于 1996 年之前的 **Honda OBD1 ECU**)的 [Ghidra](https://ghidra-sre.org/) 处理器模块。 它可以反汇编原始的 ECU ROM 镜像,跟踪 word/byte (DD) 累加器模式,并恢复控制流,从而让你获得真实的交叉引用和函数图谱。 SLEIGH 规范是根据权威的 `src/66207.op` 操作码表(该表同样驱动着 [VIRUXE/asm662](https://github.com/VIRUXE/asm662) 中的 `dasm662` 反汇编器)**自动生成**的,因此这两个解码器保持同步——包含 2606 个构造器,实现了完整的指令覆盖。 ## 安装 ``` # 将 processor module 复制到你的 Ghidra 安装中 cp -r Ghidra/Processors/OKI66207 "$GHIDRA_INSTALL_DIR/Ghidra/Processors/" # (重新)编译 SLEIGH spec "$GHIDRA_INSTALL_DIR/support/sleigh" \ "$GHIDRA_INSTALL_DIR/Ghidra/Processors/OKI66207/data/languages/oki66207.slaspec" ``` 重启 Ghidra,导入原始的 ECU `.bin` 文件,并选择语言 **`OKI:66207:LE:16:default`**。从位于 `0x0000` 的中断向量表(28 个小端序指针)开始进行种子反汇编——使用一个小型的 headless/GUI 脚本反汇编每个向量目标,即可让整个 ROM 顺畅解析。 ## 重新生成规范 ``` python3 tools/gen_sleigh.py src/66207.op \ Ghidra/Processors/OKI66207/data/languages/oki66207.slaspec ``` ## 设计说明 - **DD 上下文** —— word(1)/byte(0) 累加器模式是一个受跟踪的 SLEIGH 上下文变量,因为同一个操作码会因模式不同而改变长度(`0x86` 在 word 模式下是 3 字节的 `ADD`,在 byte 模式下是 2 字节的 `ADDB`)。`L`/word 操作将 DD 设置为 1,`LB`/byte 操作将 DD 设置为 0。由 VCAL 驱动的 DD 变化无法进行静态跟踪(与 `dasm662` 的限制相同)。 - **后缀操作码** —— 用于消歧义的操作字节可以跟在操作数之后(例如 `ADC A,N16[X1]` = `B0,NL,NH,92`);这是通过以 `;` 分隔的多 token 模式来建模的。 - **助记符** —— SLEIGH 仅允许在助记符之后绑定操作数,因此固定的寄存器/寻址特征被合并到一个 token(`L_A_DP`、`MOV_LRB_imm`)中,只有可变操作数(立即数、地址、偏移量、分支目标)会被单独显示。 - **语义** —— 控制流指令(J/CAL/SJ/SCAL/Jcc/JBS/JBR/VCAL/RT)携带了 p-code,以便 Ghidra 构建函数图和调用/跳转交叉引用。数据操作仅通过显示和长度进行解码;条件分支所使用的标志仅为占位符。**本模块用于反汇编、导航和交叉引用——而非可靠的逆向编译。** ## 验证 在 OEM **P28** ROM 上与 `dasm662` 进行了交叉验证:逐地址解码结果完全相同(DD 模式 + 每一个分支目标);整个 ROM 的自动分析生成了 10,861 条指令 / 433 个函数 / 699 个调用和 2740 个跳转引用。详见 [`docs/ghidra-validation-p28.md`](docs/ghidra-validation-p28.md)。 ## 相关项目 - [VIRUXE/asm662](https://github.com/VIRUXE/asm662) —— `asm662`/`dasm662` 汇编器和反汇编器,以及构建本模块所用的 `66207.op` 操作码表 - [VIRUXE/oki66k-transpiler](https://github.com/VIRUXE/oki66k-transpiler) —— Oki 66k 汇编 ↔ C 转换器 / lifter ## 许可证 [The Unlicense](LICENSE)。
标签:Ghidra, JS文件枚举, SLEIGH, 云资产清单, 处理器模块, 嵌入式系统, 汽车电子, 逆向工具, 逆向工程