在 Linux 下“反汇编驱动”通常有两种常见场景:
下面按最常用、最实用的方式一步步说明。
需要以下工具之一:
objdump(binutils,必备)gdbIDA Pro / Ghidra(高级分析)一般 Linux 都自带:
which objdump
file mydriver.ko
示例输出:
mydriver.ko: ELF 64-bit LSB relocatable, x86-64
objdump -d mydriver.ko > mydriver.asm
常用参数:
objdump -d -M intel mydriver.ko # Intel 语法(推荐)
objdump -dr mydriver.ko # 显示重定位信息
objdump -S mydriver.ko # 源码+汇编(若有调试信息)
先看符号:
nm mydriver.ko | grep init
再反汇编:
objdump -d mydriver.ko --disassemble=my_init
如果驱动带 -g 编译:
objdump -S mydriver.ko
可以看到 C 代码和汇编对应。
/proc/kcoresudo cp /proc/kcore kcore.img
然后用:
gdb vmlinux kcore.img
在 gdb 中:
info functions mydriver_*
disassemble mydriver_init
⚠️ 需要:
vmlinux/sys/module/xxx/sectionsls /sys/module/mydriver/sections/
cat /sys/module/mydriver/sections/.text
可配合 dd + objdump 提取内存段。
如果有驱动源码:
make CONFIG_DEBUG_INFO=y
得到带符号的 .ko,反汇编效果最佳。
| 工具 | 特点 |
|---|---|
| objdump | 快、免费、命令行 |
| gdb | 可调试、看符号 |
| Ghidra | 免费、反编译 C |
| IDA Pro | 强大、收费 |
如果你愿意,可以告诉我:
我可以给你更针对性的命令示例。