从vmlinuz或bzImage中提取vmlinux

hel*_*lwq 15 bash kernel linux-kernel

我想从vmlinuz生成System.map,因为大多数机器没有文件System.map.实际上,vmlinuz被压缩为vmlinuz或bzImage.

这是任何工具或脚本可以做到这一点?

我试过了:

dd if=/boot/vmlinuz skip=`grep -a -b -o -m 1 -e $'\x1f\x8b\x08\x00' /boot/vmlinuz | cut -d: -f 1` bs=1 | zcat > /tmp/vmlinux
Run Code Online (Sandbox Code Playgroud)

它失败了:

zcat: stdin: not in gzip format
32769+0 records in
32768+0 records out
Run Code Online (Sandbox Code Playgroud)

Abr*_*as2 17

要从内核映像中提取未压缩的内核,您可以使用内核树中extract-vmlinuxscripts目录中的脚本(至少在内核版本3.5中可用)(如果您收到类似的错误)

mktemp:无法创建临时文件/ tmp/vmlinux-XXX:参数无效

您需要更换$(mktemp /tmp/vmlinux-XXX)$(mktemp /tmp/vmlinux-XXXXXX)脚本).命令是/path/to/kernel/tree/scripts/extract-vmlinux <kernel image> >vmlinux.

如果提取的内核二进制文件包含符号信息,则应该能够System.map使用mksysmap同一子目录中的脚本创建文件.这里的命令是NM=nm /path/to/kernel/tree/scripts/mksysmap vmlinux System.map.

¹我的发行版附带的内核映像似乎被剥离,因此脚本无法获取符号.