在 Ubuntu 下,strings 是一个非常实用的命令行工具,用来从二进制文件、core 文件或内存镜像中提取可打印字符串。在调试、逆向分析、排查崩溃或确认编译内容时很有用。
下面按「是什么 → 怎么装 → 常用调试场景 → 实战示例 → 常见技巧」来说明。
strings 会扫描文件,把连续的可打印字符序列(默认至少 4 个字符)打印出来。
典型用途:
通常已自带(属于 binutils):
sudo apt update
sudo apt install binutils
检查:
strings --version
strings 文件名
示例:
strings ./a.out
只显示长度 ≥ 6 的字符串:
strings -n 6 ./a.out
strings app | grep -i "error"
strings app | grep -i "failed"
适合:
strings app | grep -i "gcc"
strings app | grep -i "debug"
或配合:
file app
nm app | head
strings core | less
常能看到:
strings /proc/<pid>/mem
(需要权限,且可能不是完整内容)
更稳妥:
gdb -p <pid>
(gdb) dump memory mem.bin 0x... 0x...
strings mem.bin
strings -n 8 ./server | grep "/var/log"
可以确认:
objdump -s -j .rodata app
gdb ./app
(gdb) info functions
(gdb) x/s 0x地址
readelf -p .rodata app
strings app | grep -i "abort"
strings app | grep -i "assert"
strings app | grep -i "version"
strings app | grep -i "password"
strings 只看静态内容,看不到运行时生成的数据.rodata 字符串如果你愿意,可以告诉我:
我可以直接给你一套针对你场景的 strings 调试命令集。