温馨提示×

centos反汇编指令怎么查错

小樊
37
2026-09-21 10:50:49
栏目: 智能运维

在 CentOS 下做反汇编(比如用 objdump、gdb、readelf 等)时,“查错”一般分两层意思:

  1. 反汇编命令用错了 / 工具报错
  2. 反汇编出来的代码看不懂 / 程序跑飞了,想定位问题

我分别说。


一、反汇编常用命令(先确认你用对没)

1. objdump(最常用)

objdump -d ./a.out

或只看某个函数:

objdump -d -M intel ./a.out | grep -A 50 "<main>:"

常见错误:

  • 没加 -d → 看不到反汇编
  • 对 strip 过的文件 → 没符号,只能看地址
  • 架构不对(如 ARM 程序在 x86 上反) → 乱码

✅ 查错方式:

file ./a.out

确认架构和是否 stripped。


2. gdb 反汇编

gdb ./a.out
(gdb) disassemble main

或 AT&T / Intel 语法:

(gdb) set disassembly-flavor intel
(gdb) disassemble

常见错误:

  • 没装 gdb:
yum install -y gdb
  • 没调试信息(gcc -g 才有)

3. readelf(看节区/符号)

readelf -S ./a.out
readelf -s ./a.out

二、反汇编“看不懂 / 程序异常”怎么查

✅ 1. 确认是不是自己编译的代码

gcc -g -O0 -o test test.c
  • -O0:反汇编最接近源码
  • -g:有符号和行号

✅ 2. 结合 gdb 动态查错(非常关键)

gdb ./a.out
(gdb) run
(gdb) backtrace
(gdb) disassemble
(gdb) info registers

如果 段错误(SIGSEGV):

(gdb) run
(gdb) bt
(gdb) disas $pc

✅ 3. 对比 C 源码和反汇编

例如:

int add(int a, int b){
    return a + b;
}

反汇编应看到:

  • mov
  • add
  • ret

如果看到:

  • 莫名其妙的 call
  • 无限循环 → 很可能是 优化 / 内联 / 栈破坏

✅ 4. 看是不是栈或调用约定问题

x86_64:

  • 参数:RDI, RSI, RDX, RCX…
  • 返回值:RAX

如果:

  • RSP 不对
  • 返回地址被覆盖

→ 基本是 栈溢出 / 缓冲区溢出


三、CentOS 特有坑

1. 没装开发工具

yum groupinstall "Development Tools"

2. 老版本 binutils

objdump --version

太老可能不支持新指令(AVX 等)

升级:

yum update binutils

四、如果你愿意,我可以更具体地帮你

你可以直接贴:

  • 你用的 反汇编命令
  • 报错信息 / 反汇编片段
  • 是 C / C++ / 汇编 / malware / 逆向

我可以帮你: ✅ 逐行解释汇编
✅ 判断哪里写错
✅ 找 crash 原因

只要把内容发出来就行。

0 踩