it-swarm.com.ru

Извлеките vmlinux из vmlinuz или bzImage

Я хочу создать System.map из vmlinuz, потому что большинство машин не имеют файла 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
13
hellolwq

Чтобы извлечь несжатое ядро ​​из образа ядра, вы можете использовать сценарий 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.

Images Образы ядра, поставляемые с моим дистрибутивом, похоже, удалены, поэтому скрипт не смог получить символы.

15
Abrixas2

Как писал Abrixas2, для создания файлов System.map вам понадобится образ ядра с символьной информацией, и в упакованном образе vmlinuz вряд ли будут присутствовать символы. Однако я могу убедиться, что сценарий в исходном посте работает с заменой '-e' на '-P' и удалением '$', т.е. 

$ dd if = vmlinuz-3.8.0-19-generic skip = `grep -a -b -o -m 1 -P '\ x1f\x8b\x08\x00' vmlinuz-3.8.0-19-generic | cut -d: -f 1` bs = 1 | zcat> /tmp/vmlinux
gzip: stdin: декомпрессия в порядке, завершающий мусор игнорируется 
2
Daniel Genin

Я на Ubuntu Linux.
Вы можете изменить $'\037\213\010\000' на "$(echo '\037\213\010\000')" в sh

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
mug896