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硬件支持

Download history 30/week @ 2024-04-29 52/week @ 2024-05-13 291/week @ 2024-05-20 36/week @ 2024-05-27 76/week @ 2024-06-03 40/week @ 2024-06-10 69/week @ 2024-06-17 261/week @ 2024-07-08 327/week @ 2024-07-15 156/week @ 2024-07-22 6/week @ 2024-07-29 96/week @ 2024-08-05 29/week @ 2024-08-12

392 每月下载量

自定义许可

1MB
24K SLoC

Bitbake 13K SLoC // 0.0% comments C 6.5K SLoC // 0.0% comments Rust 5K SLoC // 0.0% comments Shell 36 SLoC // 0.2% comments

rabbitizer

PyPI - Downloads GitHub GitHub release (latest SemVer) PyPI crate.io GitHub contributors

MIPS指令解码器API。

功能

  • 应产生匹配的汇编。
  • 完全用C编写,以实现快速解码。
    • 库完全不进行分配,也就是说 rabbitizer 本身不会在堆中分配任何东西。
  • 本仓库支持的其他语言绑定
    • Python绑定
      • 最低Python版本为3.7,旧版本不一定能保证工作。
    • C++绑定
    • Rust绑定
  • 简单的按字指令解码。
    • 库不会试图一次处理多个指令而变得过于智能。
  • 可以对指令执行验证检查。
  • 为指令提供了许多检查/分组函数,允许简化检查指令的特性,并最小化硬编码检查特定指令的需求。
  • 包括一些构建自己的指针/符号检测的小工具。
  • 可配置的,许多功能可以开启或关闭。
  • MIPS指令功能
    • jalr 指令配置了可行为,允许根据寄存器是否为 $ra 使用隐式或显式 rd 寄存器来反汇编该指令。
    • 为MIPS VR4300的协处理器命名寄存器。
    • 支持许多伪指令。
    • 正确处理从/到协处理器指令的移动。
    • 支持数字、o32、n32和n64 ABI寄存器名称。
  • 针对某些特定编译器/汇编器的某些工作区
    • SN64:
      • div/divu修复:稍微调整了生成的 divdivubreak 指令。
  • 支持多种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

参考资料

依赖关系

~1.2–1.7MB
~39K SLoC