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 |
#296 in Cargo plugins
26MB
1M
SLoC
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.
cargo install cargo-disasm
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
~250K SLoC