linux /boot目錄下的文件分析


一. Linux 啟動流程

首先說一下Linux系統大概的啟動過程:

1. 主機加電后, 系統首先加載BIOS, 這個BIOS是以寫在主板上的.

2. BIOS啟動后,執行一些例如開機自檢,硬件初始化等工作,然后讀取硬盤的第一個扇區,這個扇區被稱為MBR.這個扇區中存儲了

 一個小程序,叫做boot loader.MBR很小,只有446B. 最常見的一種boot loader叫 grub.

3. boot loader程序主要做兩件事,一個是將內核加載到內存中,另一個是啟動一個虛擬文件系統.內核文件是/boot/vmlinuz*,虛擬文件

系統文件是/boot/initrd*.

4.這個兩個文件加載到內存中后,系統會加載真正的文件系統,然后啟動1號進程init.這樣一個系統就啟動了

下面主要分析一下/boot/vmlinuz和/boot/initrd文件的內容

二. vmlinuz分析

a. mkdir /tmp/vmlinuz&&cp /boot/vmlinuz-4.4.0-21-generic  /tmp/vmlinuz/

b. cd /tmp/vmlinuz/

c. od -t x1 -A d vmlinuz-4.4.0-21-generic | grep "1f 8b 08"

本質上,vmlinuz-4.4.0-21-generic 是一個gzip壓縮文件,但是不能直接用gzip指令解壓,因為在這個文件的開頭嵌入了gzip的代碼.

所以首先用指令c找到真正的壓縮文件的頭部.這個指令的輸出形如:

0018864 ac fe ff ff 1f 8b 08 00 00 00 00 00 02 03 ec fd
然后執行下面的指令,其中的18868就是 18864+4,這里4是指1f 8b 08前面有4個字節.

dd if=vmlinuz-4.4.0-21-generic bs=1 skip=18868 | zcat > vmlinuz-gakki

objdump -D vmlinuz-gakki >> result

我們可以看到,最終得到的result就是一個匯編文件.而vmlinuz-gakki文件本質上是一個可執行程序.可以嘗試

執行他, chmod +x vmlinuz-gakki &&./vmlinuz-gakki .

顯示Segmentation fault

 

二. intrid分析

首先將/boot/intird.img文件復制到/tmp文件夾下

執行file /tmp/initrd.img-4.4.0-21-generic,得到的結果如下:

/tmp/initrd.img-4.4.0-21-generic: gzip compressed data, last modified: Fri Jun 15 13:57:43 2018, from Unix
可以看到本質上這是一個gzip格式的壓縮文件

cd /tmp

mv initrd.img-4.4.0-21-generic initrd.img-4.4.0-21-generic.gz

gzip -d initrd.img-4.4.0-21-generic.gz

file initrd.img-4.4.0-21-generic

得到的結果為:

initrd.img-4.4.0-21-generic: ASCII cpio archive (SVR4 with no CRC)
這是一個cpio文件

執行 cpio -idmv < initrd.img-4.4.0-21-generic

這樣,我們可以看到它最終生成了一個小型的文件系統.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM