mnaberez/k0emu
GitHub: mnaberez/k0emu
一款用于模拟执行 Renesas (NEC) 78K0 指令集的轻量级模拟器,解决无真实硬件时的代码行为研究问题。
Stars: 8 | Forks: 1
# k0emu
## 概述
k0emu 是一款用于运行 Renesas (NEC) 78K0 二进制文件的指令集模拟器。 它执行 `文档 `_ 中描述的所有 78K0 指令。 它可用于研究 78K0 代码的行为,但不模拟任何特定的微控制器或外设。
k0emu 的开发旨在辅助对 `Volkswagen Premium V `_ 汽车收音机(由 Delco 制造)进行逆向工程。 这些收音机使用了未记录的 NEC µPD78F0831Y 微控制器,它与 `µPD78F0833Y `_ 类似。 为此还开发了一个配套程序 `k0dasm `_。
由于在开发时未找到开源的 78K0 模拟器,因此构建了一个基于 µPD78F0831Y 的硬件 [测试平台](https://github.com/mnaberez/k0test)。 指令首先按照文档说明实现。 然后编写测试程序并在 k0emu 和真实硬件上运行。 当 k0emu 的结果与硬件不同时,会修正 k0emu 的行为以匹配硬件。 这一过程确保 k0emu 能正确实现指令。
## 功能
- 执行所有已记录的 78K0 指令
- 所有指令均通过单元测试覆盖
- 大多数操作至少有一种寻址模式已针对硬件进行测试
## 安装
k0emu 使用 Python 编写,要求 Python 3.4 或更高版本。 程序包在 Python 包索引 (PyPI) 上 `可用 `_。 您可以从那里下载,或使用 ``pip`` 安装 ``k0emu``::
```
$ pip install setuptools k0emu
```
## 用法
k0emu 接受纯二进制文件作为输入。 该文件被视为应对齐到底部内存的 ROM 镜像。 例如,如果给定一个 32K 文件,k0emu 会假设镜像应位于 0x0000-0x7FFF。 加载镜像后,模拟器将从复位向量开始执行,直到终止为止::
```
$ k0emu rom.bin
0d88: 7b 1e di AX=0000 BC=0000 DE=0000 HL=0000 SP=0000 [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0d8a: 13 42 07 mov 0ff42h,#07h AX=0000 BC=0000 DE=0000 HL=0000 SP=0000 [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0d8d: 13 f9 90 mov 0fff9h,#90h AX=0000 BC=0000 DE=0000 HL=0000 SP=0000 [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0d90: 13 fb 00 mov 0fffbh,#00h AX=0000 BC=0000 DE=0000 HL=0000 SP=0000 [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0d93: ee 1c 1f fe movw sp,#0fe1fh AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0d97: 4b cd clr1 0fecdh.4 AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0d99: 71 4b 23 clr1 0ff23h.4 AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0d9c: f0 cd mov a,0fecdh AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0d9e: f2 03 mov 0ff03h,a AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0da0: 6b ce clr1 0feceh.6 AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0da2: 71 6b 24 clr1 0ff24h.6 AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0da5: f0 ce mov a,0feceh AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
0da7: f2 04 mov 0ff04h,a AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000
...
```
k0emu 在运行时会显示跟踪信息,但目前没有任何用户界面来控制仿真。 在该功能存在之前,您可以修改 ``run.py`` 文件。 单元测试也可以作为参考,帮助您从自己的 Python 程序运行模拟器。
## 作者
`Mike Naberezny `_
标签:78K0, Delco, emulator, k0dasm, k0emu, microcontroller, NEC, pip, PyPI, Python, Renesas, reverse engineering, ROM 镜像, Volkswagen Premium V, 云资产清单, 仿真器, 单元测试, 嵌入式, 微控制器, 指令集, 无后门, 汽车电子, 硬件测试, 逆向工具, 逆向工程