5 个版本
使用旧的 Rust 2015
0.0.6 | 2017年3月15日 |
---|---|
0.0.5 | 2017年2月3日 |
0.0.4 | 2016年12月16日 |
0.0.2 | 2016年11月8日 |
0.0.1 | 2016年11月8日 |
#713 在 Cargo 插件
34KB
691 行
cargo-sym
打印出您的 crate 中的各种二进制符号。也进行实验性的反汇编。
这使用 capstone 进行反汇编,因此如果您将 capstone 作为系统库安装,则编译速度会更快。
用法
首先安装
cargo安装 cargo-sym
或通过 git
cargo安装 --githttps://github.com/m4b/cargo-sym -f
然后
cargo sym
将打印出在target/<target>/debug
中找到的第一个有效二进制目标中的每个调试符号。这可以是,例如
a.target/debug
(如果找不到特殊的目标,则使用此选项)
b. target/x86_64-unknown-linux-musl/debug
cargo sym -C
将打印出每个去混淆的调试符号cargo sym -e
将打印出每个其他二进制可导入的导出符号cargo sym -Ce
将同时执行-C
和-e
:]cargo sym -d
将以 objdump 风格反汇编您的二进制文件。 实验性cargo sym -d -C /bin/ls
将反汇编位于/bin/
的二进制文件ls
(实际上大多数发行版都移除了/bin/ls
,所以实际上不会执行)cargo sym -Cd --target=aarch64-linux-android
将反汇编在target/aarch64-linux-android/debug/<crate_name>
下的 crate 二进制文件cargo sym -C --release -x example
将打印以发布模式编译的 example 二进制文件的符号(在target/release/examples/example
)cargo sym -Cd --target=debug -x main
将在常规调试位置target/debug/examples/main
反汇编 example 二进制文件main
尝试使用 cargo sym --help
获取更多信息!
TODO
- 目标选择器尚未完善。有几个问题需要修复以使其更美观。(容易)
- 当处于 thumb 模式时,ARM 32 字节打印机不完全正确,应翻转第二个 8 字节块。(容易)
- 需要正确打印 got、plt 和 plt.got,并以更规范的方式遍历段。(不是很容易)
- 当 goblin 获得 mach 和 PE 后端(我经常说这将很快实现),更新各种后端(繁琐、困难、需要了解后端格式知识)
当然欢迎 PR :)
依赖项
~34MB
~1M SLoC