strings 是 Linux 下常用的工具,用来从二进制文件里提取“可打印字符串”。虽然看起来很简单,但实际使用中有不少常见坑,很多人踩过:
strings 默认只提取 7-bit ASCII 字符。
坑:
解决:
strings -e l # 16-bit little endian
strings -e b # 16-bit big endian
strings -e s # 7-bit
strings -e S # 8-bit(含扩展 ASCII)
或者用:
strings -n 4 file | iconv -f UTF-8 -t UTF-8 -c
默认只显示 长度 ≥ 4 的字符串。
坑:
"ok"、"id"、"IP" 这种会被直接忽略解决:
strings -n 1 file
strings 默认会跳过一些“看起来不像代码/数据”的区域(取决于版本和实现)。
坑:
解决:
strings -a file # 扫描整个文件
strings 不懂文件格式语义。
坑:
解决:
objdump、readelfstrings 不判断语义,只找连续可打印字符。
坑:
建议:
strings 下结论很多人只看字符串内容,不看位置。
坑:
解决:
strings -t x file # 十六进制偏移
strings -t d file # 十进制偏移
strings 来自 binutils,但:
可能略有差异。
坑:
建议:
strings 只是“粗筛”。
坑:
strings是“快速窥探工具”,不是“分析工具”。
如果你愿意,我可以: