1个不稳定版本
0.1.0 | 2021年8月14日 |
---|
#116 在 #processor
33 每月下载次数
用于 3 个crate(通过 ppc750cl)
9KB
176 行
ppc750cl
Rust工具,用于与PowerPC 750CL系列处理器一起工作。
Rust crate
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
~35K SLoC