温馨提示×

linux下如何反汇编函数

小樊
44
2026-09-03 09:10:55
栏目: 智能运维

在 Linux 下“反汇编函数”通常有以下几种常见场景和工具,下面按从易到难、从常用到专业给你总结。


一、使用 objdump(最常用)

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

objdump -d ./a.out

2️⃣ 只反汇编某个函数(推荐)

objdump -d ./a.out | grep -A 30 '<func_name>:'

或者更精确:

objdump -d --demangle ./a.out | awk '/<func_name>:/{flag=1} flag{print} /^$/{flag=0}'

3️⃣ 显示源码 + 汇编(需要 -g 编译)

objdump -S ./a.out

二、使用 gdb(调试时反汇编)

1️⃣ 进入 gdb

gdb ./a.out

2️⃣ 反汇编指定函数

disassemble func_name

3️⃣ 带源码的反汇编

disassemble /m func_name

4️⃣ 当前位置反汇编

disassemble

三、使用 nm + objdump(不知道函数地址时)

1️⃣ 查看函数地址

nm ./a.out | grep func_name

2️⃣ 按地址反汇编

objdump -d --start-address=0x401234 --stop-address=0x401300 ./a.out

四、使用 readelf(查看符号和段)

readelf -s ./a.out | grep func_name

五、使用 objdump 反汇编内核 / 模块

objdump -d vmlinux
objdump -d module.ko

六、高级:使用 llvm-objdump(LLVM 工具链)

llvm-objdump -d ./a.out

七、示例(C 函数反汇编)

源码

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

编译

gcc -g -O0 -o test test.c

反汇编

objdump -S test | grep -A 10 '<add>:'

八、常见选项总结

工具 常用选项 说明
objdump -d 反汇编
objdump -S 源码+汇编
objdump --demangle C++ 名字还原
gdb disassemble 调试中反汇编
nm -C C++ 符号

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

  • 用户态程序 / 内核 / 驱动
  • x86 / ARM / RISC-V
  • 是否 有符号 / 有源码

我可以直接给你最合适的一条命令

0