在 CentOS 下做反汇编(比如用 objdump、gdb、readelf 等)时,“查错”一般分两层意思:
我分别说。
objdump -d ./a.out
或只看某个函数:
objdump -d -M intel ./a.out | grep -A 50 "<main>:"
常见错误:
-d → 看不到反汇编✅ 查错方式:
file ./a.out
确认架构和是否 stripped。
gdb ./a.out
(gdb) disassemble main
或 AT&T / Intel 语法:
(gdb) set disassembly-flavor intel
(gdb) disassemble
常见错误:
gdb:yum install -y gdb
gcc -g 才有)readelf -S ./a.out
readelf -s ./a.out
gcc -g -O0 -o test test.c
-O0:反汇编最接近源码-g:有符号和行号gdb ./a.out
(gdb) run
(gdb) backtrace
(gdb) disassemble
(gdb) info registers
如果 段错误(SIGSEGV):
(gdb) run
(gdb) bt
(gdb) disas $pc
例如:
int add(int a, int b){
return a + b;
}
反汇编应看到:
movaddret如果看到:
callx86_64:
如果:
→ 基本是 栈溢出 / 缓冲区溢出
yum groupinstall "Development Tools"
objdump --version
太老可能不支持新指令(AVX 等)
升级:
yum update binutils
你可以直接贴:
我可以帮你:
✅ 逐行解释汇编
✅ 判断哪里写错
✅ 找 crash 原因
只要把内容发出来就行。