Crate disassemble [] [src]

Disassemble

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

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.

It is possible (likely?) that some functionality from within this crate may move in the future to a separate crate for broader re-use. This might impact Symbol among other things.

Installation

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

[dependencies]
disassemble = "0.0.1"

Then, let rustc know that you're going to use this crate at the top of your own crate:

extern crate disassemble;

Future Directions

In the future, we want to extend this library to support a number of additional features:

Contributions

Contributions are welcome.

Structs

Address

The location of something in an address space.

BasicBlock

A basic block is a sequence of instructions with no inward-bound branches except to the entry point and no outward-bound branches except at the exit.

BasicBlockEdge

Information about an edge between 2 basic blocks.

CallSite

Information about a call site.

ControlFlowGraph

A control flow graph.

Function

A function within a program.

LoopStructureGraph

Maintain loop structure for a given ControlFlowGraph

Memory
Module

A shared library or other component of a target.

SimpleLoop
Symbol

A symbol within an executable or library. This is a named address.

Target

An executable.

Enums

CallSiteTarget

Information about the target of a CallSite.

EdgeType

When is this edge taken? Conditionally or unconditionally?

Error

Traits

CallGraphAnalysis

Assist in performing call graph analysis.

Instruction

An assembly instruction, bytecode operation, VM operation, etc.

Segment

Functions

find_loops

Find loops and build loop forest using Havlak's algorithm, which is derived from Tarjan.