如何从 iso 中提取引导加载程序?

如何从 iso 中提取引导加载程序?

我发现了一个项目GitHub模拟一个视窗XP操作系统,我有一个问题

我想提取它,更改内容并重新创建 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 常见问题解答部分 - 我正在尝试使用 ISO,但 Rufus 说它不受支持

我相信,如果您执行其中概述的步骤,您最终会得到您想要的结果。

步骤总结

  1. 在Rufus中创建一个基于FreeDOS的USB。
  2. 挂载您创建的 ISO 文件并查找包含 DOS 引导文件的虚拟磁盘映像
  3. 将这些文件解压回根目录。
  4. .bat如果需要,修改任何文件。
  5. 修改后,dd the entire mounted image back to a USB

El Torito 靴子标准

查看 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 结构。

相关内容