在 CentOS 上执行反汇编指令报错,通常不是“反汇编本身不支持”,而是命令用错、工具没装、参数不对或文件类型不匹配。下面按最常见原因给你梳理。
很多人直接用 disasm、disassemble、objdump 等,但:
objdump 属于 binutilsgdb 才有 disassemble 指令ndisasm 属于 nasmwhich objdump
which gdb
which ndisasm
# CentOS 7/8
yum install -y binutils gdb nasm
❌ 错误示例:
disassemble a.out
disasm a.out
✅ 正确方式:
objdump -d a.out
gdb a.out
(gdb) disassemble main
ndisasm -b 32 test.bin
file a.out
如果显示:
a.out: ASCII text
那你不能反汇编,只能反汇编 ELF / PE / 二进制。
gcc test.c -o test
objdump -d test
例如:
objdump -d test.txt
会报错或无输出。
✅ 用:
objdump -D file # 强制反汇编所有段
ndisasm -b 32 x86_64_binary
✅ 正确:
ndisasm -b 64 x86_64_binary
或
objdump -d -M intel a.out
Permission denied
解决:
chmod +x a.out
或临时关闭 SELinux 测试:
setenforce 0
| 报错 | 原因 |
|---|---|
command not found |
工具未安装 |
File format not recognized |
不是 ELF 文件 |
No symbols |
没加 -g 编译 |
Cannot access memory |
gdb 没加载程序 |
Invalid instruction |
位数不对 |
objdump -d -M intel a.out
gdb a.out
(gdb) disassemble main
ndisasm -b 64 file.bin
你可以直接贴:
我可以直接告诉你为什么报错、怎么改。