strings 和 grep 是两个常见但用途不同的工具,下面从用途、工作对象、典型场景来对比说明,并给出示例。
strings:从 二进制文件 / 非文本文件 中提取 可打印字符串grep:在 文本文件或文本流 中 按模式搜索内容| 对比项 | strings | grep |
|---|---|---|
| 主要用途 | 提取二进制中的字符串 | 搜索文本中的内容 |
| 输入对象 | 二进制文件、可执行文件、core dump | 文本文件、命令输出 |
| 输出内容 | 连续的可打印字符串 | 匹配到的整行文本 |
| 是否理解文件格式 | ✅ 不关心格式,只找字符串 | ❌ 假定输入是文本 |
| 常用场景 | 逆向、调试、取证 | 日志分析、代码搜索 |
strings 是什么?strings 会扫描文件,找出 长度足够、可打印的字符序列。
strings a.out
输出可能类似:
/lib64/ld-linux-x86-64.so.2
Hello, world!
Usage: %s <arg>
grep 是什么?grep 在 文本 中搜索匹配某个模式(字符串 / 正则)的行。
grep "error" app.log
输出:
2024-01-01 10:00:00 error: connection failed
strings binary | grep "password"
含义:
strings:从二进制中提取字符串grep:在提取出的字符串中搜索 passwordgrep "main" a.out
原因:
a.out 是二进制grep 默认按“行”处理❌ 不能
| 情况 | 用什么 |
|---|---|
| 查看二进制里的字符串 | strings |
| 搜索文本文件 | grep |
| 在二进制中搜索字符串 | `strings |
| 搜索源码 | grep |
strings program | grep -i password
strings /usr/bin/* | grep http
objdumpobjdump -d a.out | grep "main"
strings负责“扒出来”,grep负责“找出来”
如果你愿意,我也可以结合 CTF / 逆向 / 日志分析 / 面试常考题 帮你进一步细化理解。