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 在 命令行工具
625KB
2.5K SLoC
bingrep
通过多种操作系统和架构的二进制文件进行搜索,并对它们进行着色。当前后端
- ELF 32/64, arm, x86, openrisc - 其他所有架构将进行解析和着色,但重定位不会正确显示
- Mach 32/64, arm, x86
- Unix 和 BSD 存档打印机
- PE (仅调试)
注意:构建需要 rustc 版本 1.20 或更高。如果您使用的是发行版的 rust 编译器,请考虑使用 https://rustup.rs 安装您的 rustc 编译器和相关二进制文件。
安装
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
打印文件偏移量范围的概述。
搜索
正在添加搜索功能。
您可以使用 bingrep --search "string"
或 bingrep -s "string"
尝试它。目前仅适用于 ELF 目标。
请就以下问题在 https://github.com/m4b/bingrep/issues/13 上发表意见,
- 如何呈现此功能,
- 将公开哪些 API,
- 最重要的用例是什么(例如,您如何搜索二进制文件)
- 如何实现
常见问题解答
为什么这个仓库叫bingrep,它与grep完全不同
这是一个好问题;我之前把它当作一个个人开发工具使用了一段时间,当时我在和互联网上的人讨论一些二进制内容,然后我决定应该把它上传到一个正规的仓库而不是发送图片。所以我迅速创建了一个仓库,我觉得自己像是在二进制中grep,所以这就是我上传时的名字。更糟糕的是,我将其命名为bg
,因为上传时的可执行文件就是这个名字,这当然与unix命令bg
冲突。关于更好名字的问题,你可以发表意见!
为什么你应该使用这个而不是X?
对于我的某些项目或工作流程,我需要非常快速地查看符号、程序头或节头的加载地址、偏移量或大小。我厌倦了使用objdump/nm/X,因为实际上,我只需要对地址、大小等进行着色,以便快速识别并继续。所以,我很快地写了这个,给它起了一个坏名字(抱歉!)。然后我彻底失控,开始到处着色。你一定会喜欢的,不用担心。你也可以自由地使用任何你想用的东西,只要让你快乐和高效就足够了!
有什么可以改进的吗?
是的,有几个未解决的问题。我认为我实际上想将符号映射功能(该功能允许打印出导出符号的每个二进制文件)从https://github.com/m4b/rdr迁移过来,以及实现一个“反向符号映射”,该映射查找调用/导入符号的每个二进制文件。
如果你也喜欢玩二进制,这个后端使用的https://github.com/m4b/goblin,负责实际的加载、解析等,如果你愿意贡献,该仓库也有几个未解决的问题。
依赖关系
~9–21MB
~272K SLoC