isoからブートローダを抽出する方法は?

isoからブートローダを抽出する方法は?

プロジェクトを見つけました。GitHubシミュレーションWindows XPOS、質問がありますその他

抽出して内容を変えてISOを作り直したい

問題は抽出できないということですブートローダーだから私が使うときクム、システムが起動しません。

だから..を使ってブートローダを抽出できると思っていましたが、dd不可能に見えます。

isoinfo -d -i /mnt/sda2/windows/vxp/VirtualXP.iso
Setting input-charset to 'UTF-8' from locale.
CD-ROM is in ISO 9660 format
System id: 
Volume id: VirtualXP
Volume set id: 20210310_1500                                                                                                                  
Publisher id: MagicISO v5.2 COPYRIGHT (C) 2001-2006 MagicISO, Inc.
Data preparer id: MagicISO v5.2 COPYRIGHT (C) 2001-2006 MagicISO, Inc.
Application id: 
Copyright File id:                                     
Abstract File id:                                     
Bibliographic File id:                                     
Volume set size is: 0
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 22250
El Torito VD version 1 found, boot catalog is in sector 22248

Joliet with UCS level 3 found.
No SUSP/Rock Ridge present
Eltorito validation header:
    Hid 1
    Arch 0 (x86)
    ID 'MagicISO Boot Record'
    Cksum 16 E7 OK
    Key 55 AA
    Eltorito defaultboot header:
        Bootid 88 (bootable)
        Boot media 0 (No Emulation Boot)
        Load segment 0
        Sys type 6
        Nsect 4
        Bootoff 56E9 22249

再生成すると、次のように見えますが、シミュレータでは機能しません。

isoinfo -d -i /mnt/sda2/windows/vxp/vxp0.iso
Setting input-charset to 'UTF-8' from locale.
CD-ROM is in ISO 9660 format
System id: LINUX
Volume id: VXP0
Volume set id: 
Publisher id: 
Data preparer id: 
Application id: MKISOFS ISO9660/HFS/UDF FILESYSTEM BUILDER & CDRECORD CD/DVD/BluRay CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING
Copyright File id: 
Abstract File id: 
Bibliographic File id: 
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 22935
El Torito VD version 1 found, boot catalog is in sector 79
CD-ROM uses ISO 9660:1999 relaxed format

Joliet with UCS level 3 found.
SUSP signatures version 1 found
Rock Ridge signatures version 1 found
Rock Ridge id 'RRIP_1991A'
Eltorito validation header:
    Hid 1
    Arch 0 (x86)
    ID ''
    Cksum AA 55 OK
    Key 55 AA
    Eltorito defaultboot header:
        Bootid 88 (bootable)
        Boot media 0 (No Emulation Boot)
        Load segment 0
        Sys type 0
        Nsect 4
        Bootoff 50 80

22249成功せずにセクター番号を試してみました。

dd if="$1" of=bootloader.bin bs=1024 skip=$sector count=1024

ブートローダの名前を次のように変更しましたgrldr(これを行うことで名前だけを変更したと思いました)。現在isoを生成するコマンドは、次のコマンドを使用します。

mkisofs -V VXP0 -J -joliet-long -iso-level 4 -D -R -o vxp0.iso -b grldr -c boot/boot.catalog -no-emul-boot -boot-load-size 4 -boot-info-table vxp0

答え1

ISOファイルからブートローダを抽出できます。geteltorito含まれているgenisoimage:

geteltorito -o bootloader VirtualXP.iso

マンページの説明では:

   geteltorito  is a Perl script which extracts the initial/default El Torito boot image from
   a CD if one exists. It will not extract any of other boot images that are allowed  by  the
   El Torito standard.

答え2

ボーナスを受ける場合に備えてコメントではなく回答で投稿していますが、「Extract El Torito」を検索して次のような結果を得ました。

Rufus Githubリポジトリ - 問題63

RUFUSが何であるかわからない場合は、次を参照してください。Rufus - 起動可能なUSBドライブを簡単に作成する方法。明らかに、問題63は、あなたが解決しようとしている問題に対処する現在終了している機能要求です。リクエストの約半分は次のとおりです。

RUFUS FAQセクション - ISOを使用しようとしていますが、Rufusはサポートされていません。

そこに説明されている手順に従って、最終的にあなたが望む結果を得ることができると信じています。

ステップの要約

  1. RufusでFreeDOSベースのUSBを作成します。
  2. 作成したISOファイルをマウントし、DOS起動ファイルを含む仮想ディスクイメージを見つけます。
  3. このファイルをルートディレクトリに再抽出します。
  4. .bat必要に応じてファイルを修正します。
  5. 修正後、dd the entire mounted image back to a USB

エルトリトーブーツ標準

Phoenix BIOSメーカーを見るEl Toritoに掲載された規格、特に14ページで実際に何が起こっているのかを確認してください。引用するISOブレーカー:

起動可能なフロッピーイメージをCDまたはDVDにコピーしてから、メディアが起動可能になることを望むことは不可能です。ファイルシステムは、El Torito標準に従って特別な構造とボリューム記述子を知って提供する必要があります。

答え3

dd if="$1" of=bootloader.bin bs=1024 skip=$sector count=1024

無効なブロックサイズを使用しています。 CD-ROMは2048バイトブロックで実行されますが、何らかの理由でEl Toritoヘッダーのブートコードサイズは512バイトブロックで指定されます。 4 x 512バイト= 2048または1つのCD-ROMブロック。isoinfoブートブロックは画像​​の最後のブロックであることがわかりました。

だから:

dd if=VirtualXP.iso of=bootloader.bin bs=2048 skip=22249 count=1

それとも

tail -c 2048 VirtualXP.iso > bootloader.bin

新しいISO構造に合わせてブートローダで変更する必要があるバイナリオフセットがないことを願っています。

関連情報