温馨提示×

如何查看CentOS函数汇编

小樊
48
2026-08-30 10:37:07
栏目: 智能运维

CentOS 上查看“函数汇编”,通常有几种常见场景:查看可执行文件/库中的函数汇编查看内核函数汇编在调试时查看函数汇编。下面按常用方式给你一份完整参考。


一、查看可执行文件或库中的函数汇编(最常用)

1️⃣ 使用 objdump(最基础、最通用)

objdump -d /bin/ls

只查看某个函数(如 main):

objdump -d /bin/ls | grep -A 30 '<main>:'

如果是 C++ 函数(有 name mangling):

objdump -d ./a.out | c++filt

或先查符号:

nm ./a.out | grep 函数名

2️⃣ 使用 gdb(推荐,最直观)

安装 gdb

sudo yum install -y gdb

调试程序

gdb ./a.out

查看函数汇编

disassemble main

查看当前函数的汇编:

disassemble

查看指定函数、指定行数:

disassemble main, +20

使用 Intel 语法(比 AT&T 更易读):

set disassembly-flavor intel
disassemble main

3️⃣ 使用 objdump + gdb 混合(定位函数地址)

objdump -t ./a.out | grep main

然后用:

objdump -d ./a.out --start-address=0x4005b6

二、查看运行时的函数汇编(动态调试)

gdb ./a.out
(gdb) break main
(gdb) run
(gdb) disassemble

单步汇编:

stepi

查看寄存器:

info registers

三、查看共享库中的函数汇编

例如查看 libc 中的 printf

objdump -d /lib64/libc.so.6 | grep -A 30 '<printf>'

或:

gdb /bin/ls
(gdb) disassemble printf

四、查看内核函数汇编(进阶)

1️⃣ 确保有内核调试符号

CentOS 常见方式:

sudo yum install kernel-debuginfo

2️⃣ 使用 crashgdb vmlinux

crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux
dis sys_open

或使用:

objdump -d vmlinux | grep -A 30 '<sys_open>'

五、查看自己写的函数的汇编(编译阶段)

1️⃣ 直接生成汇编文件

gcc -S test.c

生成 test.s(可读汇编)

2️⃣ 同时保留汇编和二进制

gcc -g -O0 -S test.c

六、常用工具汇总

工具 用途
objdump 静态反汇编
gdb 动态调试、函数汇编
nm 查看符号
readelf ELF 信息
crash 内核汇编
gcc -S 编译期生成汇编

七、快速示例(完整流程)

cat test.c
gcc -g -O0 -o test test.c
gdb ./test
(gdb) disassemble main

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

  • ✅ 是 用户态程序 还是 内核函数
  • ✅ 是 C / C++ / 汇编
  • ✅ 想看 某一个具体函数

我可以给你 精确命令 + 输出解释

0