#debug-information #debugging #binary #elf #assembly #disassembly #pdb

app cargo-disasm

Disassembly viewer for Rust projects (and more)

11 unstable releases

0.6.0 Jun 19, 2023
0.5.0 Nov 23, 2020
0.4.1 Nov 19, 2020
0.3.0 Nov 16, 2020
0.1.3 Nov 7, 2020

#357 in Cargo plugins

GPL-3.0 license

26MB
1M SLoC

Bitbake 1M SLoC // 0.0% comments C 42K SLoC // 0.1% comments Rust 13K SLoC // 0.0% comments

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 (Linux), Mach (MacOS), an PE/COFF (Windows) object files for binary crates and make use of DWARF and PDB 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 (DWARF only, PDB not yet supported)

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)

Dependencies

~9–18MB
~254K SLoC