反汇编 Linux 内核代码通常用于调试、安全分析、漏洞研究或学习内核实现。下面从可行性、常用方法、具体步骤、注意事项几个层面系统说明。
Linux 内核不像普通程序那样是一个文件,它通常包含:
不同目标,反汇编方式不同。
如果你有内核源码和编译产物:
通常在内核源码目录:
ls arch/x86/boot/vmlinux
# 或
ls vmlinux
objdump -d vmlinux > vmlinux.asm
常用参数:
objdump -drC vmlinux # 反汇编 + 重定位 + C++ 符号
objdump -S vmlinux # 源码+汇编(需编译时带 -g)
gdb vmlinux
(gdb) disassemble start_kernel
内核模块是标准 ELF:
objdump -d my_module.ko
或:
gdb my_module.ko
(gdb) disassemble init_module
这些是压缩镜像,不能直接反汇编。
scripts/extract-vmlinux bzImage > vmlinux_extracted
file vmlinux_extracted
objdump -d vmlinux_extracted
extract-vmlinux 在内核源码中:
scripts/extract-vmlinux
gdb vmlinux /proc/kcore
(gdb) disassemble sys_open
⚠️ 需要:
crash vmlinux /proc/kcore
crash> dis sys_read
objdump -d vmlinux | grep -A 50 "<schedule>:"
objdump -d --start-address=0xffffffff81000000 \
--stop-address=0xffffffff81000100 vmlinux
编译时确保:
CONFIG_DEBUG_INFO=y
CONFIG_KALLSYMS=y
llvm-objdump -d vmlinux
objdump -S vmlinux
| 目的 | 推荐方式 |
|---|---|
| 学习内核实现 | vmlinux + objdump |
| 调试崩溃 | gdb + kcore |
| 分析rootkit | extract-vmlinux |
| 分析模块 | .ko + objdump |
| 性能分析 | perf + 反汇编 |
如果你愿意,可以告诉我:
我可以直接给你针对你场景的一步一步命令。