在 Linux 下使用 strings 命令时,常见错误/误用主要集中在参数理解、编码、二进制类型、输出可读性和结果误判等方面。下面按场景总结,并给出避免方法。
strings a.out | grep main
以为能看到函数逻辑或源码。
strings 只能提取可打印字符串✅ 正确理解:
strings 是辅助分析工具,不是反编译工具。
strings binary
strings -n 6 binary
✅ 建议:
根据目标调整 -n,常见为 6~10
-a / -d 导致结果不符合预期strings -d binary
strings -a binary
| 参数 | 含义 |
|---|---|
| 默认 | 只扫描 可加载段 |
-a / -all |
扫描整个文件 |
-d / --data |
扫描 数据段 |
-a 后突然多出大量字符串✅ 建议:
strings -a binary
除非你明确只要某一段
strings chinese_binary
strings 默认识别 ASCIIstrings -e l binary # 16-bit little-endian
strings -e b binary # 16-bit big-endian
strings -e s binary # 8-bit
✅ 常用:
strings -a -e l binary
strings libfoo.so | grep password
.rodata✅ 建议:
strings -a libfoo.so
strings 会提取所有字符串
✅ 示例:
char a[] = { 'h','e','\0','l','l','o' };
❌ 不会被提取为 "hello"
strings app | grep password
✅ 正确做法:
objdump、readelfstrings image.jpg
strings data.tar.gz
✅ 建议:
file binary
确认类型后再分析
strings -n 8 binary | less
strings binary | grep -i error
✅ 常用组合:
strings -a -n 6 binary | sort -u
if strings file; then
...
fi
strings 永远返回 0(成功)✅ 正确方式:
if strings file | grep -q keyword; then
...
fi
file binary
strings -a -n 6 binary | less
strings -a -e l binary
readelf -p .rodata binary
如果你愿意,可以告诉我:
我可以针对你的用法逐条指出“哪里可能出错了”。