cargo-disasm
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 fromELF
(Linux),Mach
(MacOS), anPE/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.
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:
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:
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)