反汇编 Linux 内核是一项高级调试 / 分析任务,常用于内核安全研究、漏洞分析、驱动调试和学习内核实现。下面按常见场景 + 工具 + 示例系统说明。
Linux 内核通常不是“一个文件”,而是:
✅ 最推荐:vmlinux + objdump / gdb
编译内核后:
ls arch/x86/boot/vmlinux
# 或
ls vmlinux
如果是发行版内核:
sudo apt install linux-image-$(uname -r)-dbgsym
objdump -d vmlinux > kernel.asm
objdump -d vmlinux | grep -A 50 '<sys_open>:'
objdump -S vmlinux > kernel_source.asm
objdump -d mydriver.ko
带源码:
objdump -S mydriver.ko
查看符号:
nm mydriver.ko
scripts/extract-vmlinux arch/x86/boot/bzImage > vmlinux
然后按 vmlinux 方式反汇编。
gdb vmlinux
disassemble sys_open
disassemble /m sys_open
x/10i $pc
qemu-system-x86_64 -kernel bzImage -s -S
gdb vmlinux
(gdb) target remote :1234
(gdb) disassemble start_kernel
| 工具 | 用途 |
|---|---|
| objdump | 静态反汇编 |
| gdb | 调试 / 动态反汇编 |
| nm | 查看符号 |
| readelf | ELF 结构分析 |
| radare2 / ghidra | 逆向分析 |
| ftrace | 内核函数跟踪 |
⚠️ 内核是 位置无关 / 特殊段,不要直接当普通程序跑
⚠️ 优化级别高,反汇编可读性差
⚠️ 符号可能被 strip(发行版常见)
⚠️ 内联汇编、宏、编译器优化会影响阅读
objdump -S vmlinuxstart_kernel如果你愿意,可以告诉我:
我可以给你更具体的反汇编示例和阅读技巧。