温馨提示×

linux如何反汇编函数

小樊
39
2026-10-06 09:23:38
栏目: 智能运维

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


一、使用 objdump 反汇编(最常用)

1. 反汇编整个可执行文件 / 库

objdump -d ./a.out

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

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

或者更精确:

objdump -d ./a.out --start-address=0xADDR --stop-address=0xADDR2

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

objdump -S ./a.out

示例:

gcc -g -O0 test.c -o test
objdump -S test | less

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

1. 反汇编当前函数

(gdb) disassemble

2. 反汇编指定函数

(gdb) disassemble function_name

3. 反汇编指定地址范围

(gdb) disassemble 0x400520, 0x400560

4. 显示源码 + 汇编

(gdb) layout split

三、使用 nm + objdump 定位函数地址

先看函数地址:

nm ./a.out | grep function_name

再反汇编:

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

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

readelf -s ./a.out | grep function_name

五、使用 objdump 反汇编内核函数(内核开发)

objdump -d vmlinux | grep -A 50 '<sys_open>:'

六、使用 perf / bpftrace(运行时反汇编)

运行时查看函数汇编:

perf probe --add function_name
perf record -e probe:function_name -a

七、示例完整流程

# 编译
gcc -g -O0 test.c -o test

# 查看函数地址
nm test | grep main

# 反汇编
objdump -d test | grep -A 20 '<main>:'

或在 gdb 中:

gdb ./test
(gdb) disassemble main

八、常见选项说明

工具 常用参数 说明
objdump -d 反汇编
objdump -S 源码+汇编
objdump -M intel Intel 语法
gdb disassemble 调试反汇编
nm 无 查看符号

Intel 语法示例:

objdump -d -M intel ./a.out

如果你有具体场景(比如:C 函数 / 内核函数 / 没有符号 / 动态库 / 已经 stripped),可以告诉我,我可以给你更精确的方法。

0 踩