在 Linux 下“反汇编驱动”通常有两种场景:
.ko 文件) → 反汇编二进制.c 文件) → 查看汇编或调试下面按常见做法系统说明。
file your_driver.ko
一般是 ELF 32/64 位可重定位目标文件。
objdump 反汇编(最常用)objdump -d your_driver.ko > driver.asm
常用参数:
objdump -d -M intel your_driver.ko # Intel 语法
objdump -dr your_driver.ko # 显示重定位信息
objdump -S your_driver.ko # 源码+汇编(若有调试信息)
如果要反汇编特定函数:
objdump -d your_driver.ko | grep -A 50 "<function_name>:"
gdb 分析(适合带调试符号)gdb your_driver.ko
(gdb) disassemble function_name
若驱动带 -g 编译:
gdb your_driver.ko
(gdb) info functions
(gdb) disassemble init_module
Ghidra(免费)
.koIDA Pro(商业)
适合:
有时函数被 static inline 展开:
objdump -d your_driver.ko | less
按模块逻辑人工分析。
make drivers/xxx/xxx.lst
或:
gcc -S -o xxx.s xxx.c
make 保留汇编make KCFLAGS="-save-temps"
会生成 .s 文件。
ftrace 查看运行时汇编(动态)echo function > /sys/kernel/debug/tracing/current_tracer
echo your_function > /sys/kernel/debug/tracing/set_ftrace_filter
| 架构 | 工具 |
|---|---|
| x86_64 | objdump / gdb |
| ARM | arm-linux-gnueabi-objdump |
| ARM64 | aarch64-linux-gnu-objdump |
| MIPS | mips-linux-gnu-objdump |
示例:
aarch64-linux-gnu-objdump -d driver.ko
nm your_driver.ko
file + nmobjdump -dinit_module / module_init如果你愿意,可以告诉我:
我可以给你更具体的命令和示例。