温馨提示×

centos反汇编指令怎么解读

小樊
42
2026-10-12 00:26:18
栏目: 智能运维

在 CentOS(或其他 Linux 发行版) 中,“反汇编指令”通常指用 objdump / gdb / objdump -d 等工具把二进制文件(可执行文件、库、内核模块等)反汇编成 汇编代码。下面从「怎么用」到「怎么读」一步步说明。


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

1. objdump(最常用)

objdump -d ./a.out

常用选项:

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

示例:

objdump -d -M intel ./a.out

2. gdb(调试时看汇编)

gdb ./a.out
(gdb) disassemble main

或:

(gdb) disassemble /m main   # 混合源码

切换语法:

set disassembly-flavor intel

二、反汇编输出怎么看(重点)

以 objdump -d 为例:

0000000000400526 <main>:
  400526:       55                      push   rbp
  400527:       48 89 e5                mov    rbp, rsp
  40052a:       48 83 ec 10             sub    rsp, 0x10
  40052e:       c7 45 fc 0a 00 00 00    mov    DWORD PTR [rbp-0x4], 0xa

每一列含义

地址:       机器码                  助记符       操作数
400526:     55                      push        rbp
  • 地址:虚拟地址(64 位程序一般是 0x400000+)
  • 机器码:CPU 真正执行的字节
  • 助记符:汇编指令
  • 操作数:寄存器 / 内存 / 立即数

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

AT&T(CentOS 默认)

mov    %rsp, %rbp
movl   $0xa, -0x4(%rbp)

特点:

  • 寄存器加 %
  • 立即数加 $
  • 源在前,目的在后
  • 有大小后缀(b/w/l/q)

Intel(推荐初学者)

mov    rbp, rsp
mov    dword ptr [rbp-4], 0xa

切换:

objdump -M intel

四、常见反汇编指令含义(x86_64)

指令 含义
push rbp 保存栈基址
mov rbp, rsp 建立新栈帧
sub rsp, 0x10 分配栈空间
call func 调用函数
ret 返回
mov [rbp-4], 0xa 给局部变量赋值
cmp / je 比较 + 跳转
lea 取地址(不是取值)

五、一个完整示例解读

C 程序:

int main() {
    int a = 10;
    return a;
}

反汇编(Intel):

push   rbp
mov    rbp, rsp
sub    rsp, 0x10
mov    DWORD PTR [rbp-4], 0xa
mov    eax, DWORD PTR [rbp-4]
pop    rbp
ret

解读:

  • 建立栈帧
  • a = 10
  • 返回值放在 eax
  • 恢复栈并返回

六、调试内核 / 模块反汇编(进阶)

objdump -d vmlinux

或模块:

objdump -d mymod.ko

七、如果你愿意,我可以进一步帮你

你可以直接贴一段 CentOS 下的反汇编输出,我可以:

  • 逐行解释
  • 判断是函数调用还是栈操作
  • 对应回 C 代码逻辑
  • 分析漏洞 / shellcode / 逆向问题

只要把内容发出来就行。

0 踩