Skip to main content

MIPS disassembler

Project description

spimdisasm

PyPI - Downloads GitHub License GitHub release (latest SemVer) PyPI GitHub contributors

A matching MIPS disassembler API and front-ends with built-in instruction analysis.

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

Mainly focused on supporting Nintendo 64 binaries, but it should work with other MIPS platforms too.

Features

  • Produces matching assembly.
  • Supports .text, .data, .rodata and .bss disassembly.
    • The reloc section from Zelda 64 and some other games is supported too, but no front-end script uses it yet.
  • Generates separated files for each section of a file (.text, .data, .rodata and .bss).
  • Supports multiple files spliting from a single input binary.
  • Automatic function detection.
    • Can detect if a function is handwritten too.
  • hi/lo pairing with high success rate.
  • Automatic pointer and symbol detection.
  • Function spliting with rodata migration.
  • Supports floats and doubles in rodata.
  • String detection with medium to high success rate.
  • Allows to set user-defined function and symbol names.
  • Big, little and middle endian support.
  • Autogenerated symbols can be named after the section they come from (RO_ and B_ for .rodata and .bss sections) or its type (STR_, FLT_ and DBL_ for string, floats and doubles respectively).
  • Simple file boundary detection.
    • Detects boundaries on .text and .rodata sections
  • Lots of 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/PSYQ:
      • div/divu fix: tweaks a bit the produced div, divu and break instructions.
  • Support for specific MIPS instruction sets:
    • N64's RSP instruction disassembly support.
      • RSP decoding has been tested to build back to matching assemblies with armips.
    • PS1's R3000 GTE instruction set support.
    • PSP's R4000 ALLEGREX instruction set support.
    • PS2's R5900 EE instruction set support.
  • (Experimental) Same VRAM overlay support.
    • Overlays which are able to reference symbols from other overlays in other categories/types is supported too.
    • NOTE: This feature lacks lots of testing and probably has many bugs.

Installing

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

python3 -m pip install -U spimdisasm

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

spimdisasm>=1.31.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.

The recommended way to install a locally cloned repo is by passing the -e (editable) flag to pip.

python3 -m pip install -e .

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 spimdisasm
python3 -m pip install git+https://github.com/Decompollaborate/spimdisasm.git@develop

NOTE: Installing the development version is not recommended unless you know what you are doing. Proceed at your own risk.

Versioning and changelog

This library follows Semantic Versioning. We try to always keep backwards compatibility, so no breaking changes should happen until a major release (i.e. jumping from 1.X.X to 2.0.0).

To see what changed on each release check either the CHANGELOG.md file or check the releases page on Github. You can also use this link to check the latest release.

How to use

This repo can be used either by using the existing front-end scripts or by creating new programs on top of the back-end API.

Front-end

Every front-end CLI tool has its own --help screen.

The included tool can be executed with either spimdisasm modulename (for example spimdisasm disasmdis --help) or directly modulename (for example spimdisasm --help)

  • singleFileDisasm: Allows to disassemble a single binary file, producing matching assembly files.

  • disasmdis: Disassembles raw hex passed to the CLI as a MIPS instruction.

  • elfObjDisasm: [EXPERIMENTAL] Allows to disassemble elf files. Generated assembly files are not guaranteed to match or even be assemblable.

  • rspDisasm: Disassemblies RSP binaries.

Back-end

TODO

Check the already existing front-ends is recommended for now.

References

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

spimdisasm-1.31.0.tar.gz (103.6 kB view details)

Uploaded Source

Built Distribution

spimdisasm-1.31.0-py3-none-any.whl (134.3 kB view details)

Uploaded Python 3

File details

Details for the file spimdisasm-1.31.0.tar.gz.

File metadata

  • Download URL: spimdisasm-1.31.0.tar.gz
  • Upload date:
  • Size: 103.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.10

File hashes

Hashes for spimdisasm-1.31.0.tar.gz
Algorithm Hash digest
SHA256 0cc87447f8bb50c7c6a3f976a550f9a997d25fab947de98bba5cac027aebde73
MD5 3ca1054450b53ef34ccaa30582537583
BLAKE2b-256 76264a29721bef12f471789be24744a1c17d798397e7547eebf19bcf6be5e7a1

See more details on using hashes here.

File details

Details for the file spimdisasm-1.31.0-py3-none-any.whl.

File metadata

  • Download URL: spimdisasm-1.31.0-py3-none-any.whl
  • Upload date:
  • Size: 134.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.10

File hashes

Hashes for spimdisasm-1.31.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0938ef4af6fd2209e9e1f761655fbb80f79587c37701d6222789ec9af8d04cf9
MD5 95310f967e417d309d4e3b92e163f4e6
BLAKE2b-256 90efbb8a0ae2dec4f499b50cea0edda8a8428b0541340a22312155fdd084ba12

See more details on using hashes here.

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