温馨提示×

怎样用linux strings排错

小樊
40
2026-09-05 13:36:09
栏目: 智能运维

在 Linux 下,strings 是一个从二进制文件、core 文件、内存镜像等提取可打印字符串的工具,常用于排错、逆向、定位问题来源。下面按“场景 → 用法 → 排错思路”说明。


一、strings 能帮你排错什么?

  • 程序崩溃但无日志
  • 不确定二进制里是否包含某段代码/配置
  • 排查硬编码的 IP、路径、SQL、URL
  • 分析第三方/闭源程序行为
  • core dump 或内存文件分析

二、基本用法

strings file

默认提取长度 ≥ 4 的可打印字符串。

常用参数

strings -n 6 file        # 最小长度 6
strings -a file          # 扫描整个文件(不只数据段)
strings -e l file        # 指定编码(l=16bit little endian)
strings -t x file        # 显示字符串偏移(十六进制)

三、典型排错场景

1️⃣ 程序崩溃但没日志

strings core
strings /proc/<pid>/mem

查找:

  • 函数名
  • 错误信息
  • 文件名 / 路径

例如:

open failed: /etc/app.conf
segmentation fault in handler

2️⃣ 确认二进制里是否包含某配置

strings app | grep -i "mysql"
strings app | grep "/etc"

可发现:

  • 硬编码路径
  • 默认端口
  • 默认账号

3️⃣ 排查“为什么连了不该连的地址”

strings app | grep -E "http|ip|://"

常见发现:

http://192.168.1.10:8080
api.example.com

4️⃣ 对比版本差异(排错神器)

strings old_app > old.txt
strings new_app > new.txt
diff old.txt new.txt

快速发现:

  • 新增错误码
  • 修改的日志
  • 新依赖

5️⃣ 定位 core dump 中的线索

strings core | less

结合:

file core
gdb app core

四、进阶技巧

配合 grep

strings -a binary | grep -i error

配合 objdump

objdump -s -j .rodata binary

定位字符串地址

strings -t x binary | grep "main"

再用:

nm binary | grep main

五、常见误区

❌ 以为 strings 能看到变量值
✅ 只能看到静态字符串

❌ 认为能替代调试器
✅ 是辅助排错工具


六、实用排错流程图

程序异常
   ↓
有无日志?否
   ↓
strings 二进制 / core
   ↓
找路径 / IP / 错误
   ↓
定位代码或配置

如果你有具体报错、二进制类型或场景(如 Java / C / Go / core dump),我可以给你更针对性的 strings 用法。

0