温馨提示×

如何用gcc反汇编linux代码

小樊
51
2026-09-30 13:50:34
栏目: 智能运维

在 Linux 下使用 gcc 进行反汇编,通常有几种常见方式,取决于你想反汇编 源码、目标文件 还是 可执行文件。下面按使用场景说明。


一、从 C 源码直接反汇编(最常见)

1️⃣ 编译并生成汇编代码(不是机器码)

gcc -S test.c

生成:

  • test.s(AT&T 语法汇编)

如果想用 Intel 语法:

gcc -S -masm=intel test.c

2️⃣ 编译为可执行文件后反汇编

编译

gcc -o test test.c

反汇编(使用 objdump)

objdump -d test

只看 main 函数:

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

使用 Intel 语法:

objdump -d -M intel test

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

gcc -c test.c
objdump -d test.o

三、查看混合源码与汇编(非常推荐)

1️⃣ 编译时保留调试信息

gcc -g -o test test.c

2️⃣ 源码 + 汇编对照

objdump -S test

或:

objdump -S -M intel test

四、使用 gcc 内部反汇编(不常用)

gcc 本身不直接“反汇编”,但可以通过:

gcc -c -g -Wa,-a,-ad test.c > test.asm

生成带源码注释的汇编。


五、使用 gdb 动态反汇编(运行时)

gdb ./test
(gdb) disassemble main

Intel 语法:

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

六、常用组合(推荐)

✅ 学习 / 调试

gcc -g -O0 -o test test.c
objdump -S -M intel test

✅ 分析优化后的代码

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

七、工具对比小结

工具 用途
gcc -S 源码 → 汇编
objdump -d 反汇编二进制
objdump -S 汇编 + 源码
gdb 运行时反汇编

如果你有 具体代码 / 架构(x86 / ARM)/ 优化级别,我可以给你更精确的反汇编示例。

0 踩