MIPS instruction decoder
Go to file
2022-12-20 00:42:27 -03:00
.github/workflows jalr instruction check 2022-12-19 12:20:32 -03:00
cplusplus modifiesF* and readsF 2022-12-20 00:42:27 -03:00
include modifiesF* and readsF 2022-12-20 00:42:27 -03:00
rabbitizer modifiesF* and readsF 2022-12-20 00:42:27 -03:00
rust modifiesF* and readsF 2022-12-20 00:42:27 -03:00
src modifiesF* and readsF 2022-12-20 00:42:27 -03:00
tests modifiesF* and readsF 2022-12-20 00:42:27 -03:00
tools Rust bindings (#17) 2022-12-18 15:15:39 -03:00
.clang-format Format files with clang-format and add a format rule to makefile 2022-07-09 17:40:53 -04:00
.clang-tidy format tidy 2022-12-19 15:12:12 -03:00
.gitattributes First commit 2022-06-03 01:37:52 -04:00
.gitignore Fix C files not being packaged on Rust crates 2022-12-18 19:43:40 -03:00
Cargo.toml Fix a Rust binding not taking & 2022-12-19 20:42:38 -03:00
LICENSE First commit 2022-06-03 01:37:52 -04:00
Makefile format tidy 2022-12-19 15:12:12 -03:00
MANIFEST.in "Proper" InstrId enum 2022-06-09 14:30:39 -04:00
pyproject.toml Fix a Rust binding not taking & 2022-12-19 20:42:38 -03:00
README.md Change treatJAsUnconditionalBranch to true by default 2022-12-18 21:09:14 -03:00
setup.py use registerdescriptors 2022-12-19 18:38:05 -03:00

rabbitizer

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

A MIPS instruction decoder API.

Currently supports all the CPU instructions for MIPS I, II, III and IV.

Installing

Python bindings

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

pip install rabbitizer

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

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 Cargo.toml via:

[build]
rabbitizer = "1.5.5"

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

Features

  • Should produces matching assembly.
  • Fully written in C for fast decoding.
  • Python bindings.
    • The minimal Python version is 3.7, older versions are not guaranteed to work.
  • C++ bindings
  • Rust bindings
  • 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 pseudoinstructions.
    • 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.
  • N64 RSP instruction decoding support.
    • RSP decoding has been tested to build back to matching assemblies with armips.
  • R5900 (PS2's Emotion Engine processor) decoding support.

References