温馨提示×

Linux反汇编怎样看汇编

小樊
36
2026-10-15 04:54:38
栏目: 智能运维

在 Linux 下“看汇编 / 反汇编”,通常分几种场景:看自己写的 C 的汇编、看二进制文件的汇编、看运行时的汇编。下面按实用角度讲。


一、从 C 看汇编(最常用)

1. gcc 直接生成汇编

gcc -S test.c

生成 test.s,里面就是汇编。

想看得更清楚:

gcc -S -O0 -masm=intel test.c
  • -O0:不优化,好读
  • -masm=intel:Intel 语法(默认是 AT&T)

2. 编译后反汇编

gcc -o test test.c
objdump -d test

常用:

objdump -d -M intel test

只看 main:

objdump -d -M intel test | grep '<main>:' -A 30

二、用 GDB 看汇编(调试时最实用)

1. 编译带调试信息

gcc -g -O0 test.c -o test

2. 启动 GDB

gdb ./test

3. 看汇编

disassemble main

或者:

disas /m main

/m 会把源码和汇编对应起来,非常好用。

4. 单步执行汇编

set disassembly-flavor intel
stepi

或者:

si

看寄存器:

info registers

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

Linux 默认是 AT&T:

mov %eax, %ebx

意思是:把 eax 放到 ebx

Intel:

mov ebx, eax

推荐新手用 Intel:

objdump -M intel
set disassembly-flavor intel

四、动态看汇编(运行中的程序)

1. 跟踪系统调用

strace ./test

2. 看运行时的指令

gdb ./test
catch syscall

五、常用辅助工具

  • objdump:反汇编
  • nm:看符号
  • readelf:ELF 结构
  • gdb:动态调试
  • radare2 / ghidra:逆向神器

六、简单示例

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

AT&T 汇编:

add:
    push %ebp
    mov %esp, %ebp
    mov 8(%ebp), %eax
    add 12(%ebp), %eax
    pop %ebp
    ret

Intel 汇编:

add:
    push ebp
    mov ebp, esp
    mov eax, [ebp+8]
    add eax, [ebp+12]
    pop ebp
    ret

如果你愿意,可以告诉我:

  • 你是 学汇编 / 逆向 / 漏洞 / 操作系统?
  • 用的是 x86 还是 ARM?
  • 想看 源码对应 还是 纯二进制?

我可以直接给你一份“最小可练手示例”。

0 踩