Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: confused by the several lines of source code in mbr.S
Yes, I read the mbr.S and even boot and bootxx source code just for
fun, and everything goes well.
I'm a newbie to NetBSD, so asked for some comments, though I really
thought it is a inessential bug,
2008/1/9, David Laight <david%l8s.co.uk@localhost>:
> On Tue, Jan 08, 2008 at 10:01:29PM +0800, abutter gao wrote:
> > First, I am confused by the following lines of code from the mbr.S in
> > i386/stand/mbr directory.
>
> If you understand the rest of the code - well done :-)
>
> > ---------------------------------- snip
> > --------------------------------------------------------
> > 216 movw $lba_info, %si
> > 217 movb $0x42, %ah
> > 218 pop %dx /* recover drive # */
> > 219 push %dx /* save drive */
> > 220 int $0x13
> > 221 jc wait_key /* abort menu on read fail */
> > 222 cmpw $MBR_MAGIC, LOADADDR + MBR_MAGIC_OFFSET
> > 223 movw $nametab - LOADADDR + BOOTADDR, %bx
> > 224 je next_extended
> > ---------------------------------- snip
> > --------------------------------------------------------
> >
> > Moreover, the BOOTADDR and LOADADDR are defined as below:
> >
> > ---------------------------------- snip
> > --------------------------------------------------------
> > 65 #define BOOTADDR 0x7c00
> > 66 #define LOADADDR 0x0600 /* address were are linked to */
> > ---------------------------------- snip
> > --------------------------------------------------------
> >
> > When we call INT 0x13, BIOS will transfer the PBR code to the address
> > BOOTADDR included in the lba_info struct, and then we should check
> > whether the PBR code is valid.
> >
> > The address LOADADDR + MBR_MAGIC_OFFSET in line 222 is 0x0600 +
> > MBR_MAGIC_OFFSET, which is just the magic number's address of the mbr
> > code but not the PBR code, and no process will modify the mbr's magic
> > number, so, there is alwasy a jump to next_extended.
> >
> > So, is there any other purpos or just a bug because of incaution?
>
> Certainly the intention is to look for the 0x55aa in the extended
> partition table in order to validate it.
> OTOH it does indeed look as the wrong location is checked.
>
> I'll either fix it, or delete the test - since no one has reported any
> problems with the code processing invalid sectors.
>
> David
>
> --
> David Laight: david%l8s.co.uk@localhost
>
Home |
Main Index |
Thread Index |
Old Index