Work with disassembled code.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
tools
.gitignore
.travis.yml
Cargo.toml
LICENSE-APACHE
LICENSE-MIT
README.md
clippy.toml

README.md

Disassemble

Build Status

Dual licensed under the MIT and Apache 2 licenses.

This crate provides basic functionality for working with disassembled code. It provides (or will provide) functionality for performing:

  • Working with code that has already been compiled to machine code for any CPU, bytecode, compiler IR or JIT compiler output like that of V8 or the JVM. You provide an adapter to teach Instruction how to report the correct information for your generated code.
  • Reconstructing the control flow graph from a body of compiled code.
  • (Future) Reconstructing loops and higher level control flow constructs.
  • (Future) Performing data flow analysis.
  • (Future) Generating HTML and other rich output formats to assist in visualizing structure and higher level presentations of the data derived from the generated code.
  • (Future) Writing decompilers that generate C or other languages from lower level generated code.
  • (Future) Writing tools for reverse engineering. Many tools for reverse engineering require extracting and inferring higher level structure from the low level generated code. This crate provides those capabilities for re-use by anyone.
  • (Future) Writing views that display disassembled code for debuggers, profilers and other systems level tools.

The actual disassembly with the implementation of Instruction and other elements of the system will be provided by other crates that integrate with other systems, such as the Capstone Engine. This crate is written such that it should work with nearly any machine code, VM bytecode or JIT compiler output, given an appropriate implementation of Instruction.

Documentation

The API is fully documented with examples: https://endoli.github.io/disassemble.rs/

Installation

This crate works with Cargo and is on crates.io. Add it to your Cargo.toml like so:

[dependencies]
disassemble = "0.0.1"

Status of Implementation

Things are under active development. This project is not quite usable yet as some of the basic functionality is being written.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.