我想从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
它失败了:
zcat: stdin: not in gzip format
32769+0 records in
32768+0 records out
最佳答案
要从内核映像中提取未压缩的内核,可以使用内核树中extract-vmlinux
目录中的scripts
脚本(至少在内核版本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
。
我的发行版附带的内核映像似乎已被剥离,因此脚本无法获取符号。