我目前正試圖提取嵌入在內核映像中的初始RAM文件系統,對其進行修改並用它重新打包內核映像。您可以搜索GitHub並找到幾個執行此操作的項目here。我對這些腳本的問題是它們非常具體,或者是硬編碼值,我無法使用我正在使用的內核映像,或者它們很難進行反向工程。我正在使用的內核映像使用XZ壓縮內核,並使用GZip壓縮初始RAM文件系統CPIO存檔。 GZip流的結束通過查找特定的字符串很容易找到,這些GitHub項目似乎需要知道這些流的確切結束。找到XZ流的結尾
我能夠提取的內核像這樣的壓縮部分:
offset=$(cat zImage | grep -aob $'\xFD\x37\x7A\x58\x5A\x00' | cut -d ":" -f 1 | sed -n 2p)
dd bs=1 skip=$offset if=zImage | xzcat > Image
然後我就可以從Image
提取出初始RAM文件系統cpio歸檔是這樣的:
offset=$(cat "${1}" | grep -aob $'\x1F\x8B\x08' | cut -d ":" -f 1 | sed -n 2p)
dd bs=1 skip=$offset if=Image | zcat > initramfs.cpio
現在,似乎通過閱讀那些GitHub腳本,必須知道壓縮流的結束地址。如何在shell腳本中找到XZ流的結尾?