Linux查看二进制文件应按需选用工具:快速识别用file和size;十六进制浏览用xxd、hexdump -C或od -tx1 -tc;深度分析用readelf、nm、strings和ldd。

Linux 下查看二进制文件,核心是“不强行当文本读”,而是用专门工具解析字节结构或提取有意义的信息。直接用 cat 或 vim 打开通常会乱码甚至卡死,所以得选对工具——按用途分三类:快速识别、十六进制浏览、深度分析。
快速识别文件类型和基础属性
适合刚拿到一个文件,想马上知道它是不是可执行、是否被裁剪、用什么架构编译的。
-
file:最轻量。只看文件头和元信息,不加载内容。比如
file /bin/ls输出ELF 64-bit LSB executable, x86-64...,一眼定位格式和平台。 -
size:专注 ELF 文件的段大小。运行
size program能看到.text(代码)、.data(已初始化数据)、.bss(未初始化数据)各占多少字节,对内存布局有初步概念。
十六进制与 ASCII 混合查看(字节级浏览)
需要 inspect 具体字节内容时,这类工具把二进制转成人类可读的十六进制+字符对照表,支持跳转、截取、不同进制显示。
-
xxd:输出清晰、默认带地址偏移和 ASCII 列,支持反向转换(
xxd -r),常用命令如xxd -c 16 -l 256 file.bin查前 256 字节。 -
hexdump -C:功能类似 xxd,
-C是最常用选项,格式统一,很多脚本依赖它的输出结构。 -
od -tx1 -tc:老牌工具,
-tx1按单字节十六进制显示,-tc补上字符列;适合写在管道里做简单解析。 - 注意:
hd通常是hexdump的软链接,行为一致,不用额外学。
深度分析 ELF 结构与符号信息
面向开发调试场景,比如查为什么程序启动失败、找函数入口、确认是否静态链接、看有没有敏感字符串。
-
readelf:专啃 ELF 标准结构。查段表(
-S)、动态段(-d)、程序头(-l)、符号表(-s)都很精准,不执行也不依赖环境。 -
nm:列出符号(函数名、全局变量等)。加
-D只看动态符号,加-C自动 demangle C++ 名字,对逆向或链接问题排查很实用。 -
strings:提取所有长度 ≥4 的可打印字符序列。常配合
grep快速定位硬编码密码、URL、错误提示,例如strings binary | grep http。 -
ldd:只对动态可执行文件有效,显示运行时依赖哪些 .so。注意它可能触发部分加载逻辑,生产环境建议用
readelf -d binary | grep NEEDED替代更安全。
基本上就这些。选工具的关键不是“哪个最强”,而是“我要解决什么问题”:认文件用 file,看字节用 xxd 或 hexdump,挖细节用 readelf 和 nm。组合起来,二进制文件就不再黑盒。










