在 Linux 下,strings 是一个非常实用的命令行工具,常用于从二进制文件、核心转储(core dump)、库中查看可打印字符串,在程序调试、逆向分析、问题定位中很有用。
下面从用途 → 基本用法 → 调试实战技巧逐步说明。
strings ./a.out
strings libfoo.so
strings core
strings ./app | grep -i error
strings ./app | grep "config"
程序崩溃但没日志?
strings core | grep -i "segmentation"
strings core | tail -n 50
strings ./app | grep -i version
strings ./app | grep GCC
常见输出:
GCC: (Ubuntu 9.4.0)
3.10.0
strings ./app | grep '\.so'
或结合:
ldd ./app
如果你在日志中看到:
failed to open config file
可以:
strings ./app | grep "failed to open"
→ 确认这是程序内部字符串,而非系统库
gdb ./app core
在 gdb 中:
info proc mappings
strings core | grep "backtrace"
| 参数 | 作用 |
|---|---|
-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 是“看程序运行时在做什么”
如果你愿意,可以告诉我:
我可以给你更针对性的 strings + gdb 调试方案。