在 Linux 下对**内核(vmlinux / 内核模块)**进行反汇编,通常使用 objdump、gdb、或专用工具。下面按常见场景说明。
vmlinux 是未压缩、带符号的内核 ELF 文件(通常在源码根目录或 arch/x86/boot/ 之外)。
objdump -d vmlinux > vmlinux.asm
-d:反汇编可执行代码段objdump -d vmlinux | grep -A 50 "<sys_open>:"
带源码混合(需编译时 -g):
objdump -S vmlinux > vmlinux.S
指定架构(如 ARM):
objdump -d -m arm vmlinux
objdump -d mymodule.ko
或只反汇编某个函数:
objdump -d mymodule.ko | grep -A 30 "<init_module>:"
gdb vmlinux
(gdb) disassemble start_kernel
或:
(gdb) disassemble 0xffffffff81000000
配合 QEMU + KGDB 可实时反汇编运行中的内核。
bzImage 不能直接反汇编,需要先提取 vmlinux:
scripts/extract-vmlinux bzImage > vmlinux
然后再用 objdump。
perf annotate func_name
✅ 必须 vmlinux 而非 bzImage
✅ 编译内核时建议:
CONFIG_DEBUG_INFO=y
CONFIG_KALLSYMS=y
✅ 架构必须匹配(x86 / arm / arm64)
反汇编 Linux 内核核心指令:
objdump -d vmlinux
如果你告诉我:
我可以给你更精确的命令或流程。