温馨提示×

怎样查看linux汇编代码

小樊
84
2026-09-03 09:07:54
栏目: 智能运维

在 Linux 下查看“汇编代码”通常有以下几种常见场景和需求,我按由浅入深、不同目的给你系统讲一下。


一、查看已编译程序的汇编代码(反汇编)

1️⃣ 使用 objdump(最常用)

objdump -d ./a.out

常用选项:

objdump -d -M intel ./a.out   # Intel 语法(默认是 AT&T)
objdump -S ./a.out           # 源码 + 汇编混合(需 -g 编译)

示例:

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

2️⃣ 使用 gdb(调试时看汇编)

gdb ./a.out

在 gdb 中:

disassemble main

查看当前执行位置汇编:

disassemble

切换汇编语法:

set disassembly-flavor intel

单步执行汇编:

stepi
nexti

二、查看 C 代码对应的汇编(编译阶段)

3️⃣ gcc 生成汇编文件

gcc -S test.c

生成:

test.s

查看:

cat test.s

指定语法:

gcc -S -masm=intel test.c

4️⃣ 同时看 C 和汇编(推荐)

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

或:

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

三、查看内核 / 系统调用汇编

5️⃣ 查看系统调用号(x86_64)

cat /usr/include/asm/unistd_64.h

6️⃣ 查看内核符号

cat /proc/kallsyms

四、动态运行查看汇编(进阶)

7️⃣ strace(系统调用层面)

strace ./a.out

8️⃣ ltrace(库函数层面)

ltrace ./a.out

五、汇编风格说明(很重要)

语法 示例
AT&T(默认) mov %rax, %rbx
Intel mov rbx, rax

推荐新手用 Intel 语法,更直观。


六、常见使用场景总结

目的 推荐方式
学汇编 gcc -S
调 bug gdb + disassemble
优化分析 objdump -S
逆向分析 objdump -d

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

  • 你是 学汇编 / 调程序 / 逆向 / 内核
  • 用的是 x86 / x64 / ARM
  • 用的是 Ubuntu / CentOS / 嵌入式

我可以给你更针对性的命令和示例。

0 踩