在 Ubuntu(以及大多数 Linux 发行版)中,strings 是一个常用的命令行工具,用于从二进制文件、库、固件、内存转储等中提取可打印的字符串。下面按常见用法系统说明。
stringsstrings 会扫描文件,找出连续的可打印字符序列(默认长度 ≥ 4),常用于:
.so 动态库strings 文件名
示例:
strings /bin/ls
输出类似:
Usage: %s [OPTION]... [FILE]...
GNU coreutils
ls
默认是 4 个字符,可以修改:
strings -n 6 文件名
只显示长度 ≥ 6 的字符串。
strings -t x 文件名 # 十六进制
strings -t d 文件名 # 十进制
strings -t o 文件名 # 八进制
示例:
strings -t x /bin/ls
输出:
1234 /lib64/ld-linux-x86-64.so.2
5678 Usage: ls
strings -e l 文件名
-e 指定编码:
| 参数 | 含义 |
|---|---|
-e s |
7-bit ASCII |
-e l |
16-bit little-endian |
-e b |
16-bit big-endian |
-e L |
32-bit little-endian |
strings app | grep "/home"
strings app | grep "http"
strings libfoo.so | grep ".so"
strings firmware.bin
strings /proc/<pid>/mem
⚠️ 需要权限,且 /proc/<pid>/mem 访问受限。
strings file | sort | uniq
strings file > strings.txt
readelf -p .rodata 文件名
比 strings 更精确(只扫描 .rodata 段)。
strings 属于 binutils:
sudo apt install binutils
检查版本:
strings --version
strings 不能解密、不能反编译strings file
strings -n 6 file
strings -t x file
strings file | grep keyword
strings file > out.txt
如果你有具体目标(如:ELF 文件 / 固件 / Java 程序 / Windows exe / Android so),可以告诉我,我可以给你更针对性的 strings 使用方案。