Click here to Skip to main content
15,884,836 members
Articles / Programming Languages / C++
Article

Extracting the boot image from a CD/DVD (El Torito)

Rate me:
Please Sign up or sign in to vote.
4.69/5 (21 votes)
23 Jan 20062 min read 179.3K   3.7K   62   11
This article explains a simple way to extract the boot-image from a CD/DVD (El Torito). It just uses CreateFile and ReadFile... no mystery about APSI-programming.

Image 1

Introduction

If you need to extract a boot-image from a CD/DVD (El Torito) you can simply use this program. It only uses Win32-calls like CreateFile and ReadFile. There is no usage of ASPI-interface or other native stuff.

Background

To access the raw CD/DVD image, you can simply use the CreateFile API and specify the drive-letter as filename. This opens the drive with access to the sectors. Now, you can read the native image and also extract the boot-image if you read the "El Torito" Bootable CD-ROM Format Specification.

Using the application

The usage of the program is simple. You only need to pass the drive-letter of the CD-ROM/DVD to the program. Alternatively, you can pass a filename to an ISO-image. Here is an example of the usage, if your CD-ROM/DVD-drive is F: then:

BootExtract f:

This will store the boot-image in the current directory with the name Drive-f.NoEmulation__Segment-0000__SecCount-4.bin. The filename always contains the following elements (which can be used to write this boot-image with a burning-program like Nero):

  • Drive-f: Specifies either the drive-letter of the CD/DVD-ROM or the ISO-filename.
  • NoEmulation: The mode which is used by this boot-image. The possible modes are:
    • NoEmulation
    • 1.2MegDisk
    • 1.44MegDisk
    • 2.88MegDisk
  • Segment-xxxx: The segment which will be stored in the initial-entry for this boot-image (normally 0000 or 7C00).
  • SecCount-y: The number of virtual sectors (512 bytes) used for this boot-image.

The complete usage-description is here:

CD/DVD-BootImage-Extractor v1.0 (c) Jochen Kalmbach
http://blog.kalmbachnet.de/

Usage:
  BootExtract [switches] <source>

  source: The source file (*.iso) or CD/DVD-drive to extract images from

  switches: -b   Also extract bootrecord and bootcatalog

Examples:
  BootExtract z:

Points of interest

Location of the boot-image

If you have sector-access to the CD/DVD, you can simple follow the "El Torito" Bootable CD-ROM Format Specification to read the boot-image. The following defines need to be known (which are stated in the spec):

  • CD-sector-size: 0x800 bytes.
  • Virtual-sector-size: 0x200 bytes.
  • Sector-number of the boot-record-volume: 0x11.

Now, you can read the initial/default boot-image if you do the following:

  1. Read the boot-record-volume (sector 0x11) and check for validity.
  2. Extract the sector-number from the boot-record-volume which contains the boot-catalog (DWORD at byte-offset 0x47).
  3. Read the boot-catalog (from the above extracted sector number) and check for validity.
  4. Extract the boot-information from the Initial/Default-Entry in the boot-catalog (starting at byte-offset 0x20 in the boot-catalog).
  5. Extract the starting-sector (DWORD relative byte-offset 0x8) and the virtual-sector-count (WORD at relative byte-offset 0x6) for the boot-image from this entry and read the boot-image.

For a detailed info, you can either read the "El Torito" Bootable CD-ROM Format Specification or take a look at the source code.

History

  • 2005-08-04
    • First public release.
  • 2006-01-05
    • Fixed a bug, now it is able to correctly read 1.2/1.44 and 2.88 MB boot images.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior)
Germany Germany
1982: My first computer (VC20)
1984: Finished to build my first own computer (Z80)
1993: Mission-Volunteer in Papua New Guinea
1998: Dipl. Inform. (FH)
... working, working, working....

Comments and Discussions

 
GeneralMy vote of 5 Pin
raiserle19-Apr-18 5:01
raiserle19-Apr-18 5:01 
GeneralMy vote of 5 Pin
jachrist16-Mar-11 7:08
jachrist16-Mar-11 7:08 
software works. information on extracted file name really help.
GeneralAdd additional download options Pin
stupid77710-Jun-09 7:10
stupid77710-Jun-09 7:10 
GeneralThanks Pin
RioWing3-Jan-09 7:31
RioWing3-Jan-09 7:31 
GeneralBlock size on a CD/DVD Pin
tselly28-Nov-07 3:59
tselly28-Nov-07 3:59 
Generalboot image Pin
mcharman6-Sep-07 18:19
mcharman6-Sep-07 18:19 
Questionextracting fine but burnd cd's doesn't boot Pin
suanix4-Jan-06 12:35
suanix4-Jan-06 12:35 
AnswerRe: extracting fine but burnd cd's doesn't boot Pin
Jochen Kalmbach [MVP VC++]4-Jan-06 20:24
Jochen Kalmbach [MVP VC++]4-Jan-06 20:24 
GeneralRe: extracting fine but burnd cd's doesn't boot Pin
suanix5-Jan-06 4:48
suanix5-Jan-06 4:48 
GeneralRe: extracting fine but burnd cd's doesn't boot Pin
Jochen Kalmbach [MVP VC++]5-Jan-06 5:11
Jochen Kalmbach [MVP VC++]5-Jan-06 5:11 
GeneralRe: extracting fine but burnd cd's doesn't boot Pin
Jochen Kalmbach [MVP VC++]5-Jan-06 5:43
Jochen Kalmbach [MVP VC++]5-Jan-06 5:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.