在 Ubuntu(以及其它 Linux 发行版)里,strings 和 hexdump 都是用来“看二进制文件内容”的命令行工具,但用途和输出方式差别很大。下面从几个角度对比说明。
strings:从二进制文件中提取可打印的字符串(人类能读的文字)hexdump:以十六进制 / 字符形式显示文件的原始字节内容扫描二进制文件,把里面连续的可见字符打印出来。
strings /bin/ls
输出类似:
Usage: ls [OPTION]... [FILE]...
GNU coreutils
http://www.gnu.org/
✅ 输出干净、可读
❌ 看不到字节细节
❌ 不显示位置偏移(默认)
以十六进制 + ASCII 的方式显示文件的原始字节。
hexdump -C file.bin
输出类似:
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 3e 00 01 00 00 00 78 00 40 00 00 00 00 00 |..>.....x.@.....|
✅ 能看到每一个字节
✅ 能看到偏移量
❌ 不直观(一堆十六进制)
| 对比项 | strings | hexdump |
|---|---|---|
| 输出内容 | 可打印字符串 | 原始字节 |
| 可读性 | 高 | 低 |
| 是否显示偏移 | 默认不显示 | 显示 |
| 是否显示不可见字符 | 否 | 是 |
| 适合分析 | 文本 / 线索 | 结构 / 格式 |
| 常用参数 | -n, -a |
-C, -n |
通常这样用:
# 先快速看字符串
strings binary
# 再精确定位
hexdump -C binary | less
或者:
strings -a -n 6 binary | grep pass
strings看“说了什么”,hexdump看“怎么存的”
如果你愿意,我也可以讲:
strings 和 xxd 的区别hexdump 解析文件头(如 PNG / ELF)