Skip to main content

MIPS instruction decoder

Project description

rabbitizer

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

MIPS instruction decoder API.

Features

  • Should produce matching assembly.
  • Fully written in C for fast decoding.
    • The library is completely allocation-less, in other words rabbitizer doesn't allocate in anything in the heap by itself.
  • Other language bindings supported in this repo:
    • Python bindings
      • The minimal Python version is 3.7, older versions are not guaranteed to work.
    • C++ bindings
    • Rust bindings
  • Simple per-word instruction decoding.
    • The library doesn't try to be too smart by processing multiple instructions at a time.
  • Can perform validation checks for instructions.
  • Provides many examination/grouping functions for instructions, allowing to simplify checking characteristics of an instruction and minimizing the need to check for specific instructions in a hardcoded way.
  • Includes some minor tools to build your own pointer/symbol detection.
  • Configurable, many features can be turned on and off.
  • MIPS instructions features:
    • Named registers for MIPS VR4300's coprocessors.
    • Support for many pseudo-instructions.
    • Properly handle move to/from coprocessor instructions.
    • Support for numeric, o32, n32 and n64 ABI register names.
  • Some workarounds for some specific compilers/assemblers:
    • SN64:
      • div/divu fix: tweaks a bit the produced div, divu and break instructions.
  • Multiple MIPS architectures are supported:
    • Main focus on MIPS I, II and III architectures. Partial support for MIPS IV too.
    • N64 RSP instruction decoding support.
      • RSP decoding has been tested to build back to matching assemblies with armips.
    • R3000 GTE (PSX's CPU) decoding support.
    • R4000 ALLEGREX (PSP's CPU) decoding support.
    • R5900 (PS2's Emotion Engine processor) decoding support.

Non-features

In order to keep it simple and fast the following features will not be added:

  • Pseudo-instructions which expands to more than one instruction.

Installing

Python bindings

The recommended way to install is using from the PyPi release, via pip:

python3 -m pip install -U rabbitizer

If you use a requirements.txt file in your repository, then you can add this library with the following line:

rabbitizer>=1.10.0,<2.0.0

Development version

The unstable development version is located at the develop branch. PRs should be made into that branch instead of the main one.

Note that building the Python bindings from source require the Python development package. Under Ubuntu/Debian based distros it can be installed with:

apt install python3-dev

In case you want to mess with the latest development version without wanting to clone the repository, then you could use the following command:

python3 -m pip uninstall rabbitizer
python3 -m pip install git+https://github.com/Decompollaborate/rabbitizer.git@develop

NOTE: Installing the development version is not recommended. Proceed at your own risk.

See this package at https://pypi.org/project/rabbitizer/.

Rust bindings

Add this crate to your project with Cargo:

cargo add rabbitizer

Or you can add it manually to your Cargo.toml:

rabbitizer = "1.10.0"

See this crate at https://crates.io/crates/rabbitizer.

References

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rabbitizer-1.10.0.tar.gz (174.4 kB view hashes)

Uploaded Source

Built Distributions

rabbitizer-1.10.0-pp310-pypy310_pp73-win_amd64.whl (119.9 kB view hashes)

Uploaded PyPy Windows x86-64

rabbitizer-1.10.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (373.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (350.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (145.4 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

rabbitizer-1.10.0-pp39-pypy39_pp73-win_amd64.whl (120.3 kB view hashes)

Uploaded PyPy Windows x86-64

rabbitizer-1.10.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (372.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (350.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (145.4 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

rabbitizer-1.10.0-pp38-pypy38_pp73-win_amd64.whl (120.3 kB view hashes)

Uploaded PyPy Windows x86-64

rabbitizer-1.10.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (368.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (345.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (145.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

rabbitizer-1.10.0-pp37-pypy37_pp73-win_amd64.whl (120.0 kB view hashes)

Uploaded PyPy Windows x86-64

rabbitizer-1.10.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (371.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (347.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (145.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

rabbitizer-1.10.0-cp312-cp312-win_amd64.whl (119.5 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

rabbitizer-1.10.0-cp312-cp312-win32.whl (116.2 kB view hashes)

Uploaded CPython 3.12 Windows x86

rabbitizer-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl (403.5 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

rabbitizer-1.10.0-cp312-cp312-musllinux_1_1_i686.whl (353.3 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

rabbitizer-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (375.5 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (348.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-cp312-cp312-macosx_11_0_arm64.whl (148.2 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

rabbitizer-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl (147.2 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

rabbitizer-1.10.0-cp312-cp312-macosx_10_9_universal2.whl (248.6 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

rabbitizer-1.10.0-cp311-cp311-win_amd64.whl (119.4 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

rabbitizer-1.10.0-cp311-cp311-win32.whl (116.1 kB view hashes)

Uploaded CPython 3.11 Windows x86

rabbitizer-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl (404.5 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

rabbitizer-1.10.0-cp311-cp311-musllinux_1_1_i686.whl (371.6 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

rabbitizer-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (380.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (356.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-cp311-cp311-macosx_11_0_arm64.whl (148.2 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

rabbitizer-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl (147.0 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

rabbitizer-1.10.0-cp311-cp311-macosx_10_9_universal2.whl (248.4 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

rabbitizer-1.10.0-cp310-cp310-win_amd64.whl (119.4 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

rabbitizer-1.10.0-cp310-cp310-win32.whl (116.1 kB view hashes)

Uploaded CPython 3.10 Windows x86

rabbitizer-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl (397.9 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

rabbitizer-1.10.0-cp310-cp310-musllinux_1_1_i686.whl (373.4 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

rabbitizer-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (379.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (353.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-cp310-cp310-macosx_11_0_arm64.whl (148.2 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

rabbitizer-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl (147.0 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

rabbitizer-1.10.0-cp310-cp310-macosx_10_9_universal2.whl (248.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

rabbitizer-1.10.0-cp39-cp39-win_amd64.whl (119.9 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

rabbitizer-1.10.0-cp39-cp39-win32.whl (116.5 kB view hashes)

Uploaded CPython 3.9 Windows x86

rabbitizer-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl (395.1 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

rabbitizer-1.10.0-cp39-cp39-musllinux_1_1_i686.whl (371.3 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

rabbitizer-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (376.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (351.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-cp39-cp39-macosx_11_0_arm64.whl (148.2 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

rabbitizer-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl (147.1 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

rabbitizer-1.10.0-cp39-cp39-macosx_10_9_universal2.whl (248.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

rabbitizer-1.10.0-cp38-cp38-win_amd64.whl (119.9 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

rabbitizer-1.10.0-cp38-cp38-win32.whl (116.5 kB view hashes)

Uploaded CPython 3.8 Windows x86

rabbitizer-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl (404.8 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

rabbitizer-1.10.0-cp38-cp38-musllinux_1_1_i686.whl (373.0 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

rabbitizer-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (379.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (352.9 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-cp38-cp38-macosx_11_0_arm64.whl (148.2 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

rabbitizer-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl (147.1 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

rabbitizer-1.10.0-cp38-cp38-macosx_10_9_universal2.whl (248.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

rabbitizer-1.10.0-cp37-cp37m-win_amd64.whl (120.2 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

rabbitizer-1.10.0-cp37-cp37m-win32.whl (116.5 kB view hashes)

Uploaded CPython 3.7m Windows x86

rabbitizer-1.10.0-cp37-cp37m-musllinux_1_1_x86_64.whl (400.7 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

rabbitizer-1.10.0-cp37-cp37m-musllinux_1_1_i686.whl (368.1 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

rabbitizer-1.10.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (373.3 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

rabbitizer-1.10.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (347.2 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

rabbitizer-1.10.0-cp37-cp37m-macosx_10_9_x86_64.whl (146.9 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page