MIPS instruction decoder
Go to file
2023-12-25 12:38:30 -05:00
.github/workflows flag_disasmAsData 2023-11-11 13:19:56 -03:00
.vscode Add markdown linter to CI 2023-09-22 15:54:19 -03:00
cplusplus getBranchVramGeneric should return an unsigned value 2023-12-25 01:40:36 -05:00
docs getBranchVramGeneric should return an unsigned value 2023-12-25 01:40:36 -05:00
include getBranchVramGeneric should return an unsigned value 2023-12-25 01:40:36 -05:00
rabbitizer getBranchVramGeneric should return an unsigned value 2023-12-25 01:40:36 -05:00
rust getBranchVramGeneric should return an unsigned value 2023-12-25 01:40:36 -05:00
src getBranchVramGeneric should return an unsigned value 2023-12-25 01:40:36 -05:00
tables Don't attempt disassembling vclipw / vsqrt in gnu mode (#44) 2023-09-16 16:28:48 -03:00
tests Add test 2023-12-25 12:38:30 -05:00
.clang-format Change column limit to 120 2022-12-20 00:47:17 -03:00
.clang-tidy format tidy 2022-12-19 15:12:12 -03:00
.gitattributes Bindings for InstrIdType 2023-05-04 13:44:22 -04:00
.gitignore Add markdown linter to CI 2023-09-22 15:54:19 -03:00
.markdownlint.jsonc Fix linting on changelog.md 2023-09-22 15:01:26 -03:00
Cargo.toml flag_disasmAsData 2023-11-11 13:19:56 -03:00
CHANGELOG.md fix link on changelog 2023-11-12 12:28:01 -03:00
LICENSE First commit 2022-06-03 01:37:52 -04:00
Makefile flag_disasmAsData 2023-11-11 13:19:56 -03:00
MANIFEST.in Move all the tables into a tables folder 2023-05-02 19:01:54 -04:00
pyproject.toml Change flag_disasmAsData to flag_r5900DisasmAsData and redo the logic completely 2023-11-12 10:33:23 -03:00
README.md version bump 2023-11-12 12:26:37 -03:00
setup.py Fix passing None to first argument of RegistersTracker 2023-09-22 18:03:27 -03:00

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.
    • 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:

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 project with Cargo:

cargo add rabbitizer

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

rabbitizer = "1.8.0"

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

References