[syslinux] isolinux.bin checksum

Thomas Schmitt scdbackup at gmx.net
Thu Jan 11 23:51:39 PST 2018


Ady wrote:
> A_ The default checksum included in the tested isolinux.bin (offset 20, 
> 4-bytes-long) is the "correct" one (as oppose to the current situation, 
> since version 4.00).

That's good news.

> F_ In the tested isolinux.bin file, there are two additional bytes that 
> I found to be changed/affected by some ISO-building tools (e.g. 
> mkisofs), at offset 12 and offset 13.

This is the block number where the file content of isolinux.bin starts in
the ISO filesystem. It is the main reason to have a boot info table.

By mkisofs option -boot-load-size 4 the El Torito Boot Catalog tells BIOS
to load only the first 2048 bytes of isolinux.bin, because some BIOSes are
said to fail if they shall load all of isolinux.bin.
So the program must find and load the rest of itself. At that stage it
does not understand ISO 9660 filesystems. A simple block address helps
a lot.

man mkisofs paragraph "EL TORITO BOOT INFORMATION TABLE" says:
   The  format  of  this  table is as follows; all integers are in section
   7.3.1 ("little endian") format.

     Offset    Name           Size      Meaning
      8        bi_pvd         4 bytes   LBA of primary volume descriptor
     12        bi_file        4 bytes   LBA of boot file
     16        bi_length      4 bytes   Boot file length in bytes
     20        bi_csum        4 bytes   32-bit checksum
     24        bi_reserved    40 bytes  Reserved

          The 32-bit checksum is the sum of all the 32-bit  words  in  the
          boot  file  starting  at  byte  offset  64.   All  linear  block
          addresses (LBAs) are given in CD sectors (normally 2048 bytes).

The "primary volume descriptor" of a first session on medium is always at
Logical Block Address 16 = 0x10 0x00 0x00 0x00.
"Boot file length" and "32-bit checksum" get filled in by prepcore and do
not change by the -boot-info-table changes. Nevertheless the ISO producer
programs set these values too.

> G_ I have not tested isolinux-debug.bin nor any isohybrid features.

I understand that the isohybrid MBR loads and runs the first 2048 bytes of
isolinux.bin like BIOS would do with CD/DVD/BD media. From there on
everything should work fine. (Well, we know that a bug with handing over
of C/H/S geometry made it fail on old BIOS until last year ...)

Have a nice day :)


More information about the Syslinux mailing list