温馨提示×

strings和grep区别何在

小樊
54
2026-08-28 17:07:13
栏目: 编程语言

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"

含义:

  1. strings:从二进制中提取字符串
  2. grep:在提取出的字符串中搜索 password

❌ 不推荐的错误用法

grep "main" a.out

原因:

  • a.out 是二进制
  • grep 默认按“行”处理
  • 二进制中 没有“行”的概念
  • 结果不可靠,甚至无输出

六、两者是否可互相替代?

❌ 不能

情况 用什么
查看二进制里的字符串 strings
搜索文本文件 grep
在二进制中搜索字符串 `strings
搜索源码 grep

七、常见组合用法(实战)

从二进制中找可疑字符串

strings program | grep -i password

查找所有可执行文件中的 URL

strings /usr/bin/* | grep http

配合 objdump

objdump -d a.out | grep "main"

八、一句话记忆法

strings 负责“扒出来”,grep 负责“找出来”

如果你愿意,我也可以结合 CTF / 逆向 / 日志分析 / 面试常考题 帮你进一步细化理解。

0 踩