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.

sh 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: ```sh

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: ```sh

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

Windows
- [x] PE/COFF file disassembly and symbol discovery - [x] use PDB for symbol discovery (MSVC toolchain) - [x] use DWARF for symbol discovery (GNU)

MacOS
- [x] Mach file disassembly and symbol discovery - [x] use dSYM (DWARF) for symbol discovery

Linux
- [x] ELF file disassembly and symbol discovery - [x] use DWARF for symbol discovery

Line Information - [x] 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)