#projects #debugging #pdb #cargo-subcommand #dwarf #mach #binary

app cargo-disasm

Rust 项目(及更多)的反汇编查看器

11 个不稳定版本

0.6.0 2023年6月19日
0.5.0 2020年11月23日
0.4.1 2020年11月19日
0.3.0 2020年11月16日
0.1.3 2020年11月7日

#299Cargo 插件

Download history 2/week @ 2024-03-07 3/week @ 2024-03-14 11/week @ 2024-03-28 5/week @ 2024-04-04

62 每月下载量

GPL-3.0 许可证

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

使用方法

要查看函数 foo::bar::baz() 的汇编,即 crate foo 中模块 bar 中的函数 baz,可以从您的 crate 根目录运行子命令

# Make sure that your project has a binary to disassemble first:
cargo build
cargo disasm foo::bar::baz

有时 cargo-disasmrelease 模式下难以找到您的符号。为了确保 cargo-disasm 正在搜索所有可用的源,可以像这样传递参数 --symsrc=all

# Make sure that your project has a release binary to disassemble first:
cargo build --release
cargo disasm --release --symsrc=all foo::bar::baz

此解决方案是临时的,默认的 --symsrc=auto 应该能够很快自行解决这个问题。

待办事项

  • 在反汇编旁边显示源代码(仅限 DWARF,PDB 尚不支持)

Windows

  • PE/COFF 文件反汇编和符号发现
  • 使用 PDB 进行符号发现(MSVC 工具链)
  • 使用 DWARF 进行符号发现(GNU)

MacOS

  • Mach 文件反汇编和符号发现
  • 使用 dSYM (DWARF) 进行符号发现

Linux

  • ELF 文件反汇编和符号发现
  • 使用 DWARF 进行符号发现

行信息

  • 使用 DWARF 进行行信息
  • 使用 PDB 进行行信息

推迟

  • 反汇编的语法高亮(适用于高级源代码,对于汇编来说不必要)
  • 显示跳转源和目标的可选箭头(太嘈杂)

依赖项

~10–20MB
~275K SLoC