strings 是 Linux 中用于从二进制文件(或其他非文本文件)中提取可打印字符串的常用命令,通常来自 binutils 包。下面按常用程度和功能分类介绍其支持的参数(以 GNU strings 为例,不同版本略有差异)。
strings [选项] 文件...
-n <长度>
或
--bytes=<长度>
只显示长度 ≥ 指定值的字符串。
示例:
strings -n 6 file.bin
-e <编码>
可选值:
s:7-bit ASCII(默认)S:8-bit ASCIIb:16-bit big-endianl:16-bit little-endianB:32-bit big-endianL:32-bit little-endian示例:
strings -e l file.bin
-t <格式>
或
--radix=<格式>
格式:
o:八进制x:十六进制d:十进制示例:
strings -t x file.bin
--section=<name>
只从指定段中提取字符串。
示例:
strings --section=.rodata app
--encoding=<s|S|b|l|B|L>
与 -e 类似,但更明确。
-a
或
--all
扫描整个文件,而不是只扫描可加载段(对 ELF 默认只扫数据段)。
-f
或
--print-file-name
在每行前加上文件名。
示例:
strings -f *.bin
--include-all-whitespace
(较少用)
更常见的是配合 grep:
strings file | grep PASS
-h, --help
显示帮助信息。
-V, --version
显示版本信息。
# 提取长度 ≥ 8 的字符串
strings -n 8 binary
# 显示偏移(十六进制)
strings -t x binary
# 扫描整个文件
strings -a binary
# 提取 UTF-16 LE 字符串
strings -e l binary
# 显示文件名 + 字符串
strings -f binary
如果你使用的是 BusyBox 或 BSD strings,参数会少很多(通常只有 -n 和 -a)。需要的话我也可以对比说明。