温馨提示×

如何用ubuntu strings调试

小樊
41
2026-09-09 11:38:51
栏目: 智能运维

在 Ubuntu 下,strings 是一个非常实用的命令行工具,用来从二进制文件、core 文件或内存镜像中提取可打印字符串。在调试、逆向分析、排查崩溃或确认编译内容时很有用。

下面按「是什么 → 怎么装 → 常用调试场景 → 实战示例 → 常见技巧」来说明。


一、strings 是什么

strings 会扫描文件,把连续的可打印字符序列(默认至少 4 个字符)打印出来。

典型用途:

  • 查看程序里硬编码的字符串(路径、错误信息、URL)
  • 确认二进制是否包含调试符号信息
  • 分析 core dump、内存 dump
  • 判断程序版本、编译选项痕迹

二、安装(Ubuntu)

通常已自带(属于 binutils):

sudo apt update
sudo apt install binutils

检查:

strings --version

三、基本用法

strings 文件名

示例:

strings ./a.out

只显示长度 ≥ 6 的字符串:

strings -n 6 ./a.out

四、调试时常用的 strings 技巧

1️⃣ 查看程序中的错误 / 日志字符串

strings app | grep -i "error"
strings app | grep -i "failed"

适合:

  • 程序崩溃但无日志
  • 确认某功能是否编译进去

2️⃣ 查看是否包含调试符号

strings app | grep -i "gcc"
strings app | grep -i "debug"

或配合:

file app
nm app | head

3️⃣ 分析 core dump

strings core | less

常能看到:

  • 崩溃线程名
  • 最后执行的路径
  • 内存中残留的字符串

4️⃣ 从内存映射文件提取信息

strings /proc/<pid>/mem

(需要权限,且可能不是完整内容)

更稳妥:

gdb -p <pid>
(gdb) dump memory mem.bin 0x... 0x...
strings mem.bin

5️⃣ 结合 grep 定位问题代码

strings -n 8 ./server | grep "/var/log"

可以确认:

  • 配置文件路径
  • 默认参数
  • 隐藏行为

五、strings + 其他工具(调试更强大)

strings + objdump

objdump -s -j .rodata app

strings + gdb

gdb ./app
(gdb) info functions
(gdb) x/s 0x地址

strings + readelf

readelf -p .rodata app

六、常见调试案例

案例 1:程序莫名退出

strings app | grep -i "abort"
strings app | grep -i "assert"

案例 2:不确定是哪个版本

strings app | grep -i "version"

案例 3:怀疑硬编码密码

strings app | grep -i "password"

七、注意事项

  • strings 只看静态内容,看不到运行时生成的数据
  • 字符串可能被加密 / 压缩
  • stripped 程序仍然有 .rodata 字符串

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

  • 你是在 调试 C/C++ / Go / Rust / 逆向
  • core dump / 进程卡死 / 二进制分析

我可以直接给你一套针对你场景的 strings 调试命令集

0