#fuzzer #processor #ppc750cl #power-pc #instructions #family #750cl

已删除 ppc750cl-fuzz

ppc750cl的完整模糊测试工具

1 个不稳定版本

0.1.0 2021年8月14日

#51#fuzzer

GPL-3.0-or-later

67KB
2K 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代码。
  • 反汇编器已经对所有约4.29亿条可能的指令进行了模糊测试(通过ppc750cl-fuzz)。
  • 在未信任的字节数组上运行反汇编器是安全的。
  • 但是(目前)不能保证正确性。期望存在错误。

性能

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

依赖关系

~1.5MB
~40K SLoC