23 个版本

0.11.0 2023年2月6日
0.10.1 2022年9月12日
0.10.0 2022年3月21日
0.9.0 2021年9月18日
0.2.1 2017年7月13日

#1487命令行工具

MIT 许可证

625KB
2.5K SLoC

bingrep

Actions crates.io version

通过多种操作系统和架构的二进制文件进行搜索,并对它们进行着色。当前后端

  • ELF 32/64, arm, x86, openrisc - 其他所有架构将进行解析和着色,但重定位不会正确显示
  • Mach 32/64, arm, x86
  • Unix 和 BSD 存档打印机
  • PE (仅调试)

注意:构建需要 rustc 版本 1.20 或更高。如果您使用的是发行版的 rust 编译器,请考虑使用 https://rustup.rs 安装您的 rustc 编译器和相关二进制文件。

elf_table2

elf_table1

mach

archive

安装

bingrep 通过 cargo 提供,可以通过 cargo install bingrep 安装,或者您可以构建并安装生成的二进制文件到您喜欢的任何位置。

构建

使用稳定版 rustc 1.38.0 进行测试。

cargobuild --release

现在将生成的二进制文件复制到 <path_to_bingrep>/target/release/bingrep 您喜欢的任何位置。

运行

示例

bingrep /bin/ls

要转储解析的二进制文件的内部调试表示形式

bingrep -d /bin/ls

要解包符号,请使用 -D--demangle

bingrep -D /bin/ls

元分析(实验性)

您可以通过 --hex 打印十六进制表(WIP)或通过 --ranges 打印文件偏移量范围的概述。

ranges

搜索

正在添加搜索功能。

您可以使用 bingrep --search "string" bingrep -s "string" 尝试它。目前仅适用于 ELF 目标。

请就以下问题在 https://github.com/m4b/bingrep/issues/13 上发表意见,

  1. 如何呈现此功能,
  2. 将公开哪些 API,
  3. 最重要的用例是什么(例如,您如何搜索二进制文件)
  4. 如何实现

常见问题解答

为什么这个仓库叫bingrep,它与grep完全不同

这是一个好问题;我之前把它当作一个个人开发工具使用了一段时间,当时我在和互联网上的人讨论一些二进制内容,然后我决定应该把它上传到一个正规的仓库而不是发送图片。所以我迅速创建了一个仓库,我觉得自己像是在二进制中grep,所以这就是我上传时的名字。更糟糕的是,我将其命名为bg,因为上传时的可执行文件就是这个名字,这当然与unix命令bg冲突。关于更好名字的问题,你可以发表意见!

为什么你应该使用这个而不是X?

对于我的某些项目或工作流程,我需要非常快速地查看符号、程序头或节头的加载地址、偏移量或大小。我厌倦了使用objdump/nm/X,因为实际上,我只需要对地址、大小等进行着色,以便快速识别并继续。所以,我很快地写了这个,给它起了一个坏名字(抱歉!)。然后我彻底失控,开始到处着色。你一定会喜欢的,不用担心。你也可以自由地使用任何你想用的东西,只要让你快乐和高效就足够了!

有什么可以改进的吗?

是的,有几个未解决的问题。我认为我实际上想将符号映射功能(该功能允许打印出导出符号的每个二进制文件)从https://github.com/m4b/rdr迁移过来,以及实现一个“反向符号映射”,该映射查找调用/导入符号的每个二进制文件。

如果你也喜欢玩二进制,这个后端使用的https://github.com/m4b/goblin,负责实际的加载、解析等,如果你愿意贡献,该仓库也有几个未解决的问题。

依赖关系

~9–21MB
~272K SLoC