在 CentOS 上进行反汇编(如 objdump、gdb、readelf、radare2 等)时报错,常见原因和排查思路如下,按由浅入深的方式给你一套通用排错流程。
先把完整报错信息贴出来最有用,例如:
objdump: can't read symbol tableFile format not recognizedSegmentation faultNo such file or directoryPermission denied不同报错方向完全不同。
报错示例
objdump: app: File format not recognized
排查
file app
正常应为:
ELF 64-bit LSB executable, x86-64, ...
✅ 解决:
.o 也能反汇编,但方式不同报错示例
objdump: architecture not recognized
排查
uname -m
file app
✅ 解决:
objdump -dobjdump -d -m armaarch64-linux-gnu-objdump报错示例
command not found: objdump
排查
which objdump
rpm -q binutils
✅ 安装:
sudo yum install -y binutils
sudo yum install -y gdb
报错示例
objdump: can't disassemble for architecture i386
✅ 解决:
sudo yum install -y glibc.i686 libgcc.i686
objdump -d -m i386 app
报错示例
objdump: can't read symbol table
排查
file app
看到 stripped 是正常的。
✅ 反汇编仍然可以:
objdump -d app
只是没有函数名。
报错示例
(gdb) disassemble
No function contains program counter
✅ 解决:
(gdb) info functions
(gdb) disassemble main
或:
(gdb) x/20i $pc
Permission denied
✅ 解决:
chmod +x app
sudo !!
排查
readelf -h app
报错说明文件已损坏或被截断。
objdump -d app
objdump -d -M intel app
readelf -S app
gdb app
(gdb) disassemble main
如果你愿意,可以直接发:
file app 输出uname -acat /etc/redhat-release)我可以一步到位帮你定位。