首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从vmlinuz或bzImage提取vmlinux

从vmlinuz或bzImage提取vmlinux
EN

Stack Overflow用户
提问于 2012-08-17 08:26:01
回答 3查看 37.9K关注 0票数 16

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

有什么工具或脚本能做到这一点吗?

我试过:

代码语言:javascript
复制
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

它失败了:

代码语言:javascript
复制
zcat: stdin: not in gzip format
32769+0 records in
32768+0 records out
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-17 09:00:08

要从内核映像中提取未压缩的内核,可以使用内核树中的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文件。这里的命令是NM=nm /path/to/kernel/tree/scripts/mksysmap vmlinux System.map

我的发行版附带的内核映像似乎被删除了,因此脚本无法获得符号。

票数 22
EN

Stack Overflow用户

发布于 2018-04-23 20:51:42

我用的是ubuntu linux。

可以在sh中将$'\037\213\010\000'更改为"$(echo '\037\213\010\000')"

代码语言:javascript
复制
bash$ N=$(grep -abo -m1  $'\037\213\010\000' vmlinuz-4.13.0-37-generic | awk -F: '{print $1+1}') && 
tail -c +$N vmlinuz-4.13.0-37-generic | gzip -d > /tmp/vmlinuz
票数 0
EN

Stack Overflow用户

发布于 2021-11-01 18:32:16

试试这个:

代码语言:javascript
复制
dd if=vmlinuz bs=1 skip=24584 | zcat > vmlinux

使用

代码语言:javascript
复制
24584 = 24576 + 8

什么时候

代码语言:javascript
复制
od -A d -t x1 vmlinuz | grep '1f 8b 08 00'

给出

代码语言:javascript
复制
....... 0  1  2  3  .  .  .  .  8  
0024576 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45

好好享受吧!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12002315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档