35个稳定版本
1.12.0 | 2024年7月21日 |
---|---|
1.11.0 | 2024年5月22日 |
1.9.4 | 2024年3月18日 |
1.8.1 | 2023年12月25日 |
1.5.8 | 2022年12月20日 |
#81 在 硬件支持
392 每月下载量
1MB
24K SLoC
rabbitizer
MIPS指令解码器API。
功能
- 应产生匹配的汇编。
- 完全用C编写,以实现快速解码。
- 库完全不进行分配,也就是说
rabbitizer
本身不会在堆中分配任何东西。
- 库完全不进行分配,也就是说
- 本仓库支持的其他语言绑定
- Python绑定
- 最低Python版本为3.7,旧版本不一定能保证工作。
- C++绑定
- Rust绑定
- Python绑定
- 简单的按字指令解码。
- 库不会试图一次处理多个指令而变得过于智能。
- 可以对指令执行验证检查。
- 为指令提供了许多检查/分组函数,允许简化检查指令的特性,并最小化硬编码检查特定指令的需求。
- 包括一些构建自己的指针/符号检测的小工具。
- 可配置的,许多功能可以开启或关闭。
- MIPS指令功能
- 为
jalr
指令配置了可行为,允许根据寄存器是否为$ra
使用隐式或显式rd
寄存器来反汇编该指令。 - 为MIPS VR4300的协处理器命名寄存器。
- 支持许多伪指令。
- 正确处理从/到协处理器指令的移动。
- 支持数字、o32、n32和n64 ABI寄存器名称。
- 为
- 针对某些特定编译器/汇编器的某些工作区
SN64
:div
/divu
修复:稍微调整了生成的div
、divu
和break
指令。
- 支持多种MIPS架构
- 主要关注MIPS I、II和III架构。也部分支持MIPS IV。
- N64 RSP指令解码器支持。
- RSP解码已经测试过,可以与armips匹配的组件建立回溯。
- 支持R3000 GTE(PSX的CPU)解码。
- 支持R4000 ALLEGREX(PSP的CPU)解码。
- 支持R5900(PS2的Emotion Engine处理器)解码。
非功能特性
为了保持简单和快速,以下功能将不会添加
- 伪指令,这些指令展开成多于一个指令。
安装
Python绑定
推荐的安装方法是使用PyPi发行版,通过pip
。
python3 -m pip install -U rabbitizer
如果您在您的存储库中使用了requirements.txt
文件,那么您可以通过以下行添加此库
rabbitizer>=1.12.0,<2.0.0
开发版本
不稳定开发版本位于develop分支。PR应该提交到那个分支而不是主分支。
注意,从源代码构建Python绑定需要Python开发包。在Ubuntu/Debian基于的发行版中,可以通过以下方式安装:
apt install python3-dev
如果您想与最新的开发版本打交道,但又不想克隆仓库,则可以使用以下命令
python3 -m pip uninstall rabbitizer
python3 -m pip install git+https://github.com/Decompollaborate/rabbitizer.git@develop
注意:不建议安装开发版本。自行承担风险。
请参阅此软件包:https://pypi.ac.cn/project/rabbitizer/。
Rust绑定
使用Cargo将此crate添加到您的项目中
cargo add rabbitizer
或者您也可以手动将其添加到您的Cargo.toml
rabbitizer = "1.12.0"
请参阅此crate:https://crates.io/crates/rabbitizer。
参考资料
-
MIPS CPU
- MIPS IV指令集(修订版3.2):https://www.cs.cmu.edu/afs/cs/academic/class/15740-f97/public/doc/mips-isa.pdf
- MIPS调用约定摘要:https://courses.cs.washington.edu/courses/cse410/09sp/examples/MIPSCallingConventionsSummary.pdf
- mipt-mips伪指令:https://github.com/MIPT-ILab/mipt-mips/wiki/MIPS-pseudo-instructions
- IDT R30xx系列软件参考手册,第325页(对于
rfe
):https://psx.arthus.net/docs/R3000.pdf
-
N64的RSP(现实信号处理器)
- Nintendo Ultra64 RSP程序员指南:https://ultra64.ca/files/documentation/silicon-graphics/SGI_Nintendo_64_RSP_Programmers_Guide.pdf
- N64brew现实信号处理器/处理器核心:https://n64brew.dev/wiki/Reality_Signal_Processor/CPU_Core
-
R3000 GTE
-
R4000 ALLEGREX
- ALLEGREX-指令手册-英文:https://github.com/Decompollaborate/rabbitizer/files/11356332/ALLEGREX-Instruction_Manual-English.pdf
- FPU-指令手册-英文:https://github.com/Decompollaborate/rabbitizer/files/14950191/FPU-Instruction_Manual-English.pdf
- VFPU-指令手册-英文:https://github.com/Decompollaborate/rabbitizer/files/11356335/VFPU-Instruction_Manual-English.pdf
- VFPU-用户手册-英文:https://github.com/Decompollaborate/rabbitizer/files/11356333/VFPU-Users_Manual-English.pdf
- 另一份PlayStationPortable文档:http://hitmen.c02.at/files/yapspd/psp_doc/frames.html
- 第4.8节“Allegrex指令”:http://hitmen.c02.at/files/yapspd/psp_doc/chap4.html#sec4.8
- GNU binutils: https://github.com/bminor/binutils-gdb/compare/011365b...a0176d8
-
R5900
依赖关系
~1.2–1.7MB
~39K SLoC