cargo-disasm 0.3.0

Disassembly viewer for Rust projects (and more)
cargo-disasm-0.3.0 is not a library.
Visit the last successful build: cargo-disasm-0.1.3

cargo-disasm

crates.io version build status license

A cargo subcommand that displays the assembly generated for a function. cargo-disasm does not require recompiling your project, it disassembles and finds symbols in your binary directly.

This is still under heavy development

For now cargo-disasm can disassemble symbols from ELF object files for binary crates and make use of DWARF debug information for symbol discovery. Check here to see the current progress.

cargo install cargo-disasm

asciicast demo

Usage

To view the assembly of a function foo::bar::baz(), a function baz in module bar in crate foo, the subcommand can be run from your crate's root directory:

# Make sure that your project has a binary to disassemble first:
cargo build
cargo disasm foo::bar::baz

Sometimes cargo-disasm has trouble finding your symbols in release mode. To make sure that cargo-disasm is searching all sources available, --symsrc=all can be passed as an argument like so:

# Make sure that your project has a release binary to disassemble first:
cargo build --release
cargo disasm --release --symsrc=all foo::bar::baz

This solution is temporary and the default --symsrc=auto should be able to figure this out on its own soon.

TODO

  • Showing source code alongside disassembly

Windows

  • PE/COFF file disassembly and symbol discovery
  • use PDB for symbol discovery (MSVC toolchain)
  • use DWARF for symbol discovery (GNU)

MacOS

  • Mach file disassembly and symbol discovery
  • use dSYM (DWARF) for symbol discovery

Linux

  • ELF file disassembly and symbol discovery
  • use DWARF for symbol discovery

Line Information

  • use DWARF for line information
  • use PDB for line information

Postponed

  • Syntax highlighting for disassembly (good for higher level source code, unecessary for assembly)
  • Optional arrows for displaying jump sources and targets (too noisy)