#instructions #random #generate #power-pc #ppc750cl #processors #750cl

yanked ppc750cl-rand

生成随机的 PowerPC 750CL 指令

1 个不稳定发布

0.1.0 2021 年 8 月 14 日

#13#processors

GPL-3.0-or-later

65KB
1.5K SLoC

ppc750cl

Rust 工具,用于处理 PowerPC 750CL 系列处理器。

Rust 软件包

rustup components add rustfmt
cargo run --package ppc750cl-genisa
cargo build --release

Python 模块

python -m venv env
source ./env/bin/activate
pip install maturin
maturin build -m ./disasm-py/Cargo.toml

在开发环境中安装模块

maturin develop -m ./disasm-py/Cargo.toml
python
>>> import ppc750cl
>>> ins = ppc750cl.Ins(addr=0x80006969, code=0x10400420)
>>> str(ins)
'ps_merge00 f2, f0, f0'
>>> ins.fields()
[('frD', 2), ('frA', 0), ('frB', 0)]
>>> ins.frD
2

指令集

对于不熟悉 PowerPC 的人来说,这里有一些基础知识。

  • PowerPC 7xx 是从 1997 年到 2012 年生产的 RISC CPU 系列之一。
    • 它们使用 32 位字,每个指令都是 32 位宽。
  • 本项目(仅)关注与 PowerPC 750CL 的兼容性。
    • 该芯片以其代号“Broadway”闻名,用于任天堂 Wii。
    • 其前身 PowerPC 750CXe 用于任天堂 GameCube。
    • 它添加了一个“配对单”SIMD 单元和其他一些指令。

isa.yaml

文件 isa.yaml 包含了 PowerPC 750CL 指令集的完整定义。

它为反汇编器、汇编器和 Rust/Python 绑定代码分析工具提供动力。

类似于 LLVM TableGen,程序 ppc750cl-genisa 生成一个实现指令解码器的 Rust 文件。

安全性与正确性

  • 此项目在测试实用程序之外不使用 unsafe Rust 代码。
  • 反汇编器已经对所有约 42.9 亿个可能的指令进行了模糊测试(通过 ppc750cl-fuzz)。
  • 可以在不受信任的字节数组上运行反汇编器,这是安全的。
  • 然而,没有关于正确性的保证(目前还没有)。预计会有错误。

性能

  • 性能不是很好,但可以接受。
  • 反汇编和打印:600k 指令/秒(2.4 MB/s)
  • 仅反汇编:6M 指令/秒(24 MB/s)

依赖关系

~1.5MB
~38K SLoC