要反汇编 CentOS 的内核,常见目的有:
下面按 常见场景 + 推荐工具 详细说明。
uname -r
示例:
3.10.0-1160.el7.x86_64
yum install -y binutils gdb objdump nm
如果需要源码级调试(可选):
yum install -y kernel-devel kernel-debuginfo
vmlinux(最常用)CentOS 内核的 未压缩 ELF 内核 在:
/usr/lib/debug/lib/modules/$(uname -r)/vmlinux
如果没有,先安装:
yum install kernel-debuginfo
objdump 反汇编objdump -d /usr/lib/debug/lib/modules/$(uname -r)/vmlinux > vmlinux.asm
只反汇编某个函数(推荐):
objdump -d vmlinux | grep -A 30 "<do_fork>:"
nm vmlinux | grep do_fork
/boot/vmlinuz(压缩内核)/boot/vmlinuz-* 是 压缩后的内核,不能直接反汇编。
file /boot/vmlinuz-$(uname -r)
如果是 bzImage:
extract-vmlinux /boot/vmlinuz-$(uname -r) > vmlinux
extract-vmlinux来自内核源码scripts/extract-vmlinux
objdump -d vmlinux > vmlinux.asm
gdb vmlinux
disassemble start_kernel
或指定地址:
disassemble 0xffffffff81000000
objdump -d your_module.ko
cat /proc/kallsyms | grep your_function
或:
objdump -d /sys/module/your_module/sections/.text
| 工具 | 用途 |
|---|---|
| objdump | 静态反汇编 |
| gdb | 动态调试 |
| radare2 / r2 | 逆向分析 |
| IDA Pro | 商业级内核逆向 |
| nm | 查看符号 |
| addr2line | 地址 → 源码行 |
✅ 解决:使用 vmlinux + kernel-debuginfo
可以,但需要:
kernel-debuginfo
kernel-devel
GDB 中:
list do_fork
1. 安装 kernel-debuginfo
2. 获取 vmlinux
3. objdump -d vmlinux
4. nm vmlinux | grep 函数名
5. gdb vmlinux
6. disassemble 函数
do_sys_openobjdump -d vmlinux | grep -A 50 "<do_sys_open>:"
如果你愿意,我可以:
只要告诉我你的 CentOS 版本 + 分析目的 即可。