CentOS 上“反汇编失败”通常不是单一原因,要结合你用的工具、命令、目标文件、系统环境来看。下面我把最常见的原因 + 排查方法按场景给你梳理清楚。
| 场景 | 失败原因 | 典型表现 |
|---|---|---|
用 objdump |
没装 binutils 或参数错误 | command not found / 无输出 |
用 gdb |
没调试信息 / 文件不是可执行文件 | No symbol table / 无法反汇编 |
用 ndisasm |
文件不是纯二进制 | Unable to read |
| 二进制是 32/64 位不匹配 | 工具或库不匹配 | 反汇编内容异常 |
| 文件不是 ELF | 脚本 / 数据文件 | File format not recognized |
| SELinux / 权限问题 | 无法读取文件 | Permission denied |
| 文件被裁剪 / 损坏 | 非完整程序 | 反汇编为空 |
objdump 反汇编失败objdump -d test
objdump: test: File format not recognized
原因:
排查:
file test
看到类似:
ELF 64-bit LSB executable
才是可反汇编的。
如看到:
Bourne-Again shell script
那当然反不了。
gdb 反汇编失败(gdb) disassemble main
No symbol table is loaded.
-ggcc -g test.c -o test
反汇编:
disassemble main
ndisasm 反汇编失败ndisasm test
❌ 原因:
ndisasm 只能处理纯二进制文件,不能处理 ELF。
✅ 正确用法:
objcopy -O binary test test.bin
ndisasm -b 64 test.bin
CentOS 最小化安装常见:
objdump: command not found
安装:
yum install -y binutils
查看:
getenforce
如果是 Enforcing,可能限制访问。
临时测试:
setenforce 0
ls -l test
加权限:
chmod +x test
一步一步来:
# 1. 看文件类型
file test
# 2. 是否 ELF
readelf -h test
# 3. 是否可执行
ls -l test
# 4. 用 objdump 测试
objdump -d test | head
你可以直接把下面信息贴出来(不需要全贴):
file xxx 输出)cat /etc/centos-release)我可以精确告诉你为什么失败,以及用哪条命令一定能反汇编出来。