温馨提示×

怎样用linux strings调试程序

小樊
37
2026-09-29 14:35:47
栏目: 智能运维

在 Linux 下,strings 是一个非常实用的命令行工具,常用于从二进制文件、核心转储(core dump)、库中查看可打印字符串,在程序调试、逆向分析、问题定位中很有用。

下面从用途 → 基本用法 → 调试实战技巧逐步说明。


一、strings 能帮你做什么(调试场景)

  • 查看程序里硬编码的字符串(日志、错误信息、配置名)
  • 确认程序链接了哪些库、版本信息
  • 分析 core dump / 崩溃文件
  • 检查是否包含敏感信息(密码、路径)
  • 辅助定位“程序崩在哪、打了什么日志”

二、基本用法

1️⃣ 查看可执行文件中的字符串

strings ./a.out

2️⃣ 查看动态库

strings libfoo.so

3️⃣ 查看 core 文件

strings core

4️⃣ 过滤关键字(最常用)

strings ./app | grep -i error
strings ./app | grep "config"

三、调试程序常用技巧

✅ 技巧 1:定位崩溃相关信息

程序崩溃但没日志?

strings core | grep -i "segmentation"
strings core | tail -n 50

✅ 技巧 2:确认程序版本 / 编译信息

strings ./app | grep -i version
strings ./app | grep GCC

常见输出:

GCC: (Ubuntu 9.4.0)
3.10.0

✅ 技巧 3:确认链接的库名

strings ./app | grep '\.so'

或结合:

ldd ./app

✅ 技巧 4:查找日志 / 错误信息来源

如果你在日志中看到:

failed to open config file

可以:

strings ./app | grep "failed to open"

→ 确认这是程序内部字符串,而非系统库


✅ 技巧 5:结合 gdb 使用(强烈推荐)

gdb ./app core

在 gdb 中:

info proc mappings
strings core | grep "backtrace"

四、strings 常用参数

参数 作用
-n 最少字符串长度
-a 扫描整个文件(默认)
-t x 显示偏移(十六进制)
-e 指定编码(如 s=16位)

示例:

strings -n 6 ./app
strings -t x ./app

五、一个完整调试示例

现象:程序启动失败,无日志

# 1. 查看字符串
strings ./server | grep -i "fail"

# 2. 发现
# "fail to bind port 8080"

# 3. 检查端口
netstat -tunlp | grep 8080

# 4. 解决问题

六、注意事项

⚠️ strings 看不到变量内容

  • 只显示编译进文件的字符串
  • 运行时变量需用 gdb

⚠️ 混淆 / 加壳程序可能无明显字符串


七、总结一句话

strings 是“先看程序里有什么话”,gdb 是“看程序运行时在做什么”

如果你愿意,可以告诉我:

  • 你在调试 什么程序(C/C++/Go?)
  • 是 崩溃 / 无输出 / 行为异常?

我可以给你更针对性的 strings + gdb 调试方案。

0 踩