是否有任何FAT FS驱动程序希望引导扇区的字节508和509为零?

问题描述

在实现my own boot sector loaders starting in 2012时,我确保将偏移量508和509的字节清零。这些是标准512字节大小的扇区的倒数第四个和倒数第三个字节。这是我放在这里的:

    _fill 508,38,start 

    dw 0
; 2-byte magic bootsector signature
    dw 0AA55h

我现在不记得任何具体的消息来源了,但是我相信我添加了两个零字节,以增强与某些或其他OS驱动程序的兼容性。在某些时候,我一定已经知道这可能是必需的。

在文档“ Microsoft可扩展固件倡议-fat32文件系统规范-FAT:磁盘格式的一般概述-版本1.03,2000年12月6日”中进行分页时,没有产生有关字节508和509的任何信息。 13它指出:

关于FAT卷的扇区0,还有另外一个重要说明。如果我们考虑一下 扇区作为字节数组,扇区[510]等于0x55,扇区[511]等于0xAA必须为真。

注意:许多FAT文档错误地指出此0xAA55签名占用了“最后2个字节” 引导扇区”。仅当且仅当BPB_BytsPerSec为512时,此语句才正确。 BPB_BytsPerSec大于512,这些签名字节的偏移量不会更改(尽管它是 完全可以,在引导扇区末尾的最后两个字节也包含此签名)。

最接近谈论字节508和509的是fat32的FSINFO结构的描述,在第22页:

FSI_TrailSig 508 4

值0xAA550000。该跟踪签名用于验证它实际上是FSInfo扇区。请注意,这的高2个字节 值-进入偏移量510和511的字节中-与 签名字节在扇区0中以相同的偏移量使用。

但是它没有指定整个双字应与引导扇区中的此签名匹配。

现代的FreeDOS引导扇区加载器does provide these two bytes as zeros

       times   0x01f1-$+$$ db 0

filename        db      "KERNEL  SYS",0

sign            dw      0xAA55

页面"An Examination of the MSWIN4.1 OS Boot Record"还将MS Windows 4.x引导扇区描述为两个字节均为零。在标题为“数据和 内存中的错误消息”,最后一行包含这些零:

7DF0  00 57 49 4E 42 4F 4F 54 20 53 59 53 00 00 55 AA   .WINBOOT SYS..U.

这些零字节是有原因的吗?还是全部都是“邪教”的实例?

解决方法

仅回顾一下FreeDOS内核的所有引导扇区加载程序的状态,我就在另一个文件中提出了具体要求。在the LBA FAT32 loader中:

       times 0x01ee-$+$$ db 0

msg_BootError   db "No "
        ; currently,only "kernel.sys not found" gives a message,; but read errors in data or root or fat sectors do not.

filename    db "KERNEL  SYS"

sign        dw 0,0xAA55
        ; Win9x uses all 4 bytes as magic value here.
,

V2引导扇区:

01F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA   ..............U.

MS-DOS 3.2引导扇区:

01F0  00 00 00 00 00 00 00 00 00 00 00 00 00 80 55 AA   ..............U.

IBM 4.01引导扇区:

01F0  4D 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA   M.............U.

自从多年前确定该标准后,任何声称支持FAT的操作系统都无法更改规则。即使Win9x具有这些附加的零,您自己开发的引导程序也不需要这些相同的零就可以在任何情况下正常工作。

关于FreeDOS的奇怪案例。他们非常努力地成为所有人的朋友,无论过去还是将来。复制DOS错误的极端...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...