Linux
提取嵌入式 initramfs
我有一個核心,其中嵌入了一個 initramfs。我想提取它。
x86 boot sector
我做的時候得到了輸出file bzImage
我有這個核心映像的 System.map 文件。
有沒有辦法在System.map文件的幫助下從這個核心中提取嵌入式 initramfs 映像?
在系統映射文件中找到的有趣字元串是:(以防萬一)
57312:c17fd8cc T __initramfs_start 57316:c19d7b90 T __initramfs_size
在 gentoo wiki 中有一些關於此的資訊:https ://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging
它建議使用
binwalk
效果非常好。我將通過一個範例進行快速演練:
首先用binwalk解壓bzImage文件:
> 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。