温馨提示×

怎样解读centos反汇编指令

小樊
48
2026-10-14 23:12:46
栏目: 智能运维

在 CentOS(或其他 Linux 发行版)里,“反汇编指令”通常指的是用工具(如 objdump、gdb、objcopy 等)把可执行文件 / 目标文件 / 内存中的机器码翻译成汇编指令来看。下面从「用什么工具」「怎么用」「怎么读懂反汇编结果」三个层面说明。


一、常用反汇编工具(CentOS 上)

1. objdump(最常用)

属于 binutils,一般 CentOS 自带。

objdump -d test

常用选项:

  • -d:反汇编可执行代码段
  • -D:反汇编所有段
  • -M intel:使用 Intel 语法(默认是 AT&T)
  • -S:源码 + 汇编混合(需 -g 编译)
  • -l:显示行号

示例:

objdump -d -M intel test

2. gdb(调试时反汇编)

gdb ./test
(gdb) disassemble main

或 Intel 语法:

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

查看某地址:

(gdb) x/10i $rip

3. readelf(辅助理解结构)

readelf -h test
readelf -S test

二、一个反汇编示例解读

假设 C 代码:

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

编译:

gcc -O0 -c test.c -o test.o
objdump -d -M intel test.o

反汇编可能类似:

0000000000000000 <add>:
   0:   55                      push   rbp
   1:   48 89 e5                mov    rbp, rsp
   4:   89 7d fc                mov    DWORD PTR [rbp-4], edi
   7:   89 75 f8                mov    DWORD PTR [rbp-8], esi
   a:   8b 45 fc                mov    eax, DWORD PTR [rbp-4]
   d:   03 45 f8                add    eax, DWORD PTR [rbp-8]
  10:   5d                      pop    rbp
  11:   c3                      ret

怎么读?

  • push rbp / mov rbp, rsp:函数栈帧建立
  • edi, esi:第 1、2 个参数(System V AMD64 调用约定)
  • [rbp-4]、[rbp-8]:局部变量
  • eax:返回值
  • ret:返回调用者

三、AT&T vs Intel 语法区别(很重要)

AT&T(默认)

mov %rsp, %rbp

Intel(推荐新手)

mov rbp, rsp

区别:

  • AT&T:源在左,目的在右,寄存器加 %
  • Intel:目的在左,源在右,更像教材

四、常见反汇编场景

1. 分析崩溃 / core dump

gdb ./test core
(gdb) bt
(gdb) disassemble

2. 查看编译器优化

gcc -O2
objdump -d

你会看到:

  • 内联
  • 寄存器复用
  • 无栈帧

3. 分析恶意程序 / 二进制

objdump -D -M intel malware

五、学习建议

  • 先学 x86_64 汇编基础
  • 熟悉 调用约定(System V ABI)
  • 多对比:
    • C 源码 ↔ 汇编
  • 工具组合:
    • gcc -S → 看编译器生成的汇编
    • objdump -d → 看最终二进制

如果你有具体的反汇编代码贴出来,我可以直接逐行帮你解释。

0 踩