extract Встроенные initramfs

У меня есть ядро, в которое встроена одна initramfs. Я хочу извлечь его.

Я получил выходной x86 boot sector когда я делаю file bzImage

У меня есть файл System.map для этого образа ядра.

Есть ли способ извлечь встроенное изображение initramfs из этого ядра с помощью или без помощи файла System.map ?

Интересная строка, найденная в файле карты системы : (на всякий случай это помогает)

 57312:c17fd8cc T __initramfs_start 57316:c19d7b90 T __initramfs_size 

2 Solutions collect form web for “extract Встроенные initramfs”

В gentoo wiki есть информация об этом: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

Он рекомендует использовать binwalk который работает очень хорошо.

Я приведу пример:

сначала извлеките файл bzImage с помощью binwalk:

 > binwalk --extract bzImage DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 Microsoft executable, portable (PE) 18356 0x47B4 xz compressed data 9772088 0x951C38 xz compressed data 

Я закончил с тремя файлами: 47B4 , 47B4.xz и 951C38.xz

 > file 47B4 47B4: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=aa47c6853b19e9242401db60d6ce12fe84814020, stripped 

Теперь давайте снова запустить binwalk на 47B4 :

 > binwalk --extract 47B4 DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 ELF, 64-bit LSB executable, AMD x86-64, version 1 (SYSV) 9818304 0x95D0C0 Linux kernel version "4.4.6-gentoo (root@host) (gcc version 4.9.3 (Gentoo Hardened 4.9.3 p1.5, pie-0.6.4) ) #1 SMP Tue Apr 12 14:55:10 CEST 2016" 9977288 0x983DC8 gzip compressed data, maximum compression, from Unix, NULL date (1970-01-01 00:00:00) <snip> 

Это вернулось с длинным списком найденных путей и несколькими потенциально интересными файлами. Давайте посмотрим.

 > file _47B4.extracted/* <snip> _47B4.extracted/E9B348: ASCII cpio archive (SVR4 with no CRC) 

файл E9B348 – это (уже распакованный) архив cpio, именно то, что мы ищем! Бинго!

Чтобы распаковать несжатый архив cpio (ваши initramfs!) В вашем текущем каталоге, просто запустите

 > cpio -i < E9B348 

Это было слишком легко. binwalk – это абсолютно тот инструмент, который вы ищете. Для справки я использовал v2.1.1 здесь.

Насколько мне известно, архив initramfs cpio просто связан с ядром.

Следовательно, это должно работать:

  1. используйте dd для извлечения диапазона между c17fd8cc и c19d7b90
  2. распакуйте полученные данные с помощью распаковщика CPIO.
  • Как читать вывод использования SysRq для использования в режиме показа памяти?
  • Как указать ISO как местоположение корневой файловой системы для GRUB?
  • «Неизвестная таблица разделов» - неправильно сконфигурированное ядро
  • Linux отключает / скрывает устройства mtdblock от lsblk
  • С учетом исключения ядра ATA, как определить, на какой физический диск влияет?
  • 10G сетевой сетевой адаптер с отключенным / переполнением
  • Как может сбой insmod с модуля ядра уже загружен, даже lsmod не содержит этот модуль?
  • Параметры вызова Systemd
  • Почему устройства ARM не поставляются с последним ядром Linux?
  • Как автоматизировать конфигурацию сборки ядра Linux
  • Безопасно удалять файлы System.map- * в / boot?
  • Linux и Unix - лучшая ОС в мире.