Skip to content
Prints various binary symbols in your crate
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.gitignore
.travis.yml
Cargo.lock
Cargo.toml
LICENSE
README.md

README.md

cargo-sym Build Status

Prints various binary symbols in your crate. Also experimentally disassembles.

This uses capstone for disassembly, so it will compile faster if you have capstone installed as a system library.

Usage

First install:

cargo install cargo-sym

or via git:

cargo install --git https://github.com/m4b/cargo-sym -f

Then:

  1. cargo sym will print every debugging symbol it finds in the first valid binary target in target/<target>/debug. This can be, for example:

a.target/debug (this is used if it doesn't find a special target, like the following)

b. target/x86_64-unknown-linux-musl/debug

  1. cargo sym -C will print every debugging symbol demangled
  2. cargo sym -e will print every exported symbol importable by other binaries
  3. cargo sym -Ce will do -C and -e together :]
  4. cargo sym -d will disassemble your binary, objdump style. experimental
  5. cargo sym -d -C /bin/ls will disassemble the binary ls at /bin/ (actually most distros strip /bin/ls so it actually won't)
  6. cargo sym -Cd --target=aarch64-linux-android will disassemble your crates binary at target/aarch64-linux-android/debug/<crate_name>
  7. cargo sym -C --release -x example will print the symbols from the example binary you compiled in release mode (at target/release/examples/example)
  8. cargo sym -Cd --target=debug -x main will disassemble the example binary main in the regular debug location target/debug/examples/main

Try cargo sym --help for more information!

TODO:

  1. Target selector is not. There are a few fixmes to make it nicer. (easy)
  2. ARM 32-byte printer not completely correct when in thumb mode, should reverse second 8 byte block. (easy)
  3. Need to properly print got, plt, and plt.got and iterate through sections in a more principled manner. (not to easy)
  4. When goblin gets a mach and PE backend (which I keep saying will be soon), update the various backends (tedious, hard, requires knowledge of backend formats)

PRs welcome of course :)

You can’t perform that action at this time.