温馨提示×

怎样用gcc反汇编linux代码

小樊
48
2026-09-21 16:42:58
栏目: 智能运维

在 Linux 下使用 gcc 反汇编代码,通常有几种常见方式,取决于你是想:

  • 反汇编 可执行文件 / 目标文件
  • 反汇编 C 源码对应的汇编
  • 使用 gcc 自带能力 还是 objdump

下面按使用场景说明。


一、从 C 源码直接生成汇编(最常用)

1️⃣ 只编译到汇编,不生成二进制

gcc -S test.c

生成:

test.s   # 汇编代码

2️⃣ 想看更“像机器”的汇编(intel 语法)

gcc -S -masm=intel test.c

3️⃣ 包含宏展开、调试信息

gcc -S -g -fverbose-asm test.c

二、反汇编已编译的目标文件(.o)

1️⃣ 使用 gcc 的“后端”(不够常用)

gcc -c test.c
gcc -Wa,-alh -c test.c

-Wa,-alh 会输出 汇编 + 源码对照


三、反汇编可执行文件 / .o(推荐 objdump)

虽然你问的是 gcc,但 真正“反汇编”通常用 objdump(binutils)

1️⃣ 反汇编整个可执行文件

objdump -d a.out

2️⃣ Intel 语法(更接近 Windows 习惯)

objdump -d -M intel a.out

3️⃣ 反汇编并混合源码

gcc -g test.c -o test
objdump -S test

4️⃣ 只看某个函数

objdump -d a.out | grep -A 20 "<main>:"

四、反汇编内核 / 系统级代码(Linux 特有)

1️⃣ 内核模块(.ko)

objdump -d -M intel mymodule.ko

2️⃣ 内核 vmlinux

objdump -d vmlinux | less

五、gcc 内部反汇编(高级)

gcc -c test.c -o test.o -Wa,-adlhn
  • -ad:反汇编
  • -l:插入源码行号
  • -h:显示符号表
  • -n:数字形式

六、小结(怎么选)

目的 命令
C → 汇编 gcc -S
反汇编可执行 objdump -d
混合源码 objdump -S
Intel 语法 -masm=intel / -M intel

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

  • 是 用户态程序 还是 内核代码
  • 是否要 调试符号
  • 是否要 ARM / x86_64

我可以给你更精确的命令。

0 踩