“Linux 反汇编出错”是一个比较宽泛的说法,具体原因取决于你用什么工具、对什么文件、在什么环境下操作。下面我按常见情况给你一个系统性的排查清单。
你可能在反汇编:
检查:
file 你的文件
正常应看到:
ELF 64-bit LSB executable, x86-64, ...
如果看到:
ASCII text
那就不可能反汇编。
在 x86_64 Linux 上反汇编 ARM 程序,会直接报错或输出乱码。
查看架构:
readelf -h 文件 | grep Machine
示例:
Advanced Micro Devices X86-64 → 用 x86 反汇编ARM / AArch64 → 用 ARM 工具objdump(最常用)
objdump -d 程序
或指定架构:
objdump -d -m arm 程序
gdb
gdb 程序
(gdb) disassemble main
radare2
r2 -d 程序
错误示例:
objdump -d 文本文件
→ 会报错或无输出
这不是“反汇编失败”,但会:
file 程序
# 看到 stripped
✅ 仍然可以反汇编,只是可读性差。
有时 gdb / 调试器报错:
Cannot execute binary file
检查:
ldd 程序
没有执行权限可能导致工具异常:
chmod +x 程序
例如:
vmlinuz(压缩内核).ko 模块这些不能直接 objdump。
✅ 需要先解压或加载符号。
./a.out
bash: cannot execute binary file: Exec format error
安装支持:
sudo apt install gcc-multilib
请告诉我以下信息,我可以直接帮你定位:
file 文件
uname -m
| 报错 | 原因 |
|---|---|
File format not recognized |
不是 ELF |
Architecture unknown |
架构不匹配 |
No symbols |
被 strip |
Invalid instruction |
架构或模式错误 |
Segmentation fault |
文件损坏或工具 bug |
如果你愿意,把具体报错贴出来,我可以直接告诉你是哪一步错了。