iso에서 부트로더를 추출하는 방법은 무엇입니까?

iso에서 부트로더를 추출하는 방법은 무엇입니까?

프로젝트를 찾았어요GitHub시뮬레이션윈도우 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 구조와 일치하도록 부트로더에서 변경해야 하는 바이너리 오프셋이 없기를 바랍니다.

관련 정보