1. MBR(Master Boot Record)
高亮前的446个字节为MBR引导代码,
之后为DPT(Disk Patition Table)占64个字节, 再之后两位(55 AA(101010110101010))位结束符.(第1扇区结束)
DPT结构:
表1 分区表第1字段(第一分区) | |||
字节位移 | 字段长度 | 值 | 字段名和定义 |
0x01BE | BYTE | 0x80 | 引导指示符(Boot Indicator) 指明该分区是否是活动分区。 |
0x01BF | BYTE | 0x01 | 开始磁头(Starting Head) |
0x01C0 | 6位 | 0x01 | 开始扇区(Starting Sector) 只用了0~5位。后面的两位(第6位和第7位)被开始柱面字段所使用 |
0x01C1 | 10位 | 0x00 | 开始柱面(Starting Cylinder) 除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值。开始柱面是一个10位数,最大值为1023 |
0x01C2 | BYTE | 0x06 | 系统ID(System ID) 定义了分区的类型,详细定义,(06为FAT16, 07为HPFS/NTFS) |
0x01C3 | BYTE | 0x98 | 结束磁头(Ending Head) |
0x01C4 | 6位 | 0x20 | 结束扇区(Ending Sector) 只使用了0~5位。最后两位(第6、7位)被结束柱面字段所使用 |
0x01C5 | 10位 | 0x19D | 结束柱面(Ending Cylinder) 除了结束扇区字段最后的两位外,还使用了1位,以组成该柱面值。结束柱面是一个10位的数,最大值为1023 |
0x01C6 | DWORD | 0x00000001 | 相对扇区数(Relative Sectors) 从该磁盘的开始到该分区的开始的位移量,以扇区来计算 |
0x01CA | DWORD | 0x00019000 | 总扇区数(Total Sectors) 该分区中的扇区总数 |
之后两个分区及一个扩展分区的Boot Indicator都为0, 表示非活动分区.
2. DBR(Dos Boot Record)
上图高亮处(第2扇区), 为第一分区的DBR(操作系统引导记录区)
结构如下:
表6 一个FAT16分区上的引导扇区段 | ||
字节位移 | 字段长度(字节) | 字段名称 |
0x00 | 3 | 跳转指令(Jump Instruction) |
0x03 | 8 | OEM ID |
0x0B | 25 | BPB |
0x24 | 26 | 扩展BPB |
0x3E | 448 | 引导程序代码(Bootstrap Code) |
0x01FE | 4 | 扇区结束标识符(0x55AA) |
上图并没有程序引导代码: There is no OS to boot on this disk.
BPB:
表7 FAT16分区的BPB字段 | |||
字节位移 | 字段长度(字节) | 例值 | 名称和定义 |
0x0B | 2 | 0x0200 | 扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512 |
0x0D | 1 | 0x04(2K) | 每簇扇区数(Sectors Per Cluster) 一个簇中的扇区数。由于FAT16文件系统只能跟踪有限个簇(最多为65536个)。因此,通过增加每簇的扇区数可以支持最大分区数。分区的缺省的簇的大 小取决于该 分区的大小。本字段合法的十进制值有 1、2、4、8、16、32、64和128。导致簇大于32KB(每扇区字节数*每簇扇区数)的值会引起磁盘错误和软件错误 |
0x0e | 2 | 0x0003 | 保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为1 |
0x10 | 1 | 0x01 | FAT数(Number of FAT)该分区上FAT的副本数。本字段的值一般为2 |
0x11 | 2 | 0x0200 | 根目录项数(Root Entries) 能够保存在该分区的根目录文件夹中的32个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为512。其中一个项常常被用作卷标号 (Volume Label),长名称的文件和文件夹每个文件使用多个项。文件和文件夹项的最大数一般为511,但是如果使用的长文件名,往往都达不到这个数 |
0x13 | 2 | 0x0000 | 小扇区数(Small Sector) 该分区上的扇区数,表示为16位(<65536)。对大于65536个扇区的分区来说,本字段的值为0,而使用大扇区数来取代它 |
0x15 | 1 | 0xF8 | 媒体描述符( Media Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用 |
0x16 | 2 | 0x0064(32K) | 每FAT扇区数(Sectors Per FAT) 该分区上每个FAT所占用的扇区数。计算机利用这个数和FAT数以及隐藏扇区数来决定根目录在哪里开始。计算机还可以根据根目录中的项数(512)决定该 分区的用户数据区从哪里开始 |
0x18 | 2 | 0x0010 | 每道扇区数(Sectors Per Trark) |
0x1A | 2 | 0x0099 | 磁头数(Number of head) |
0x1C | 4 | 0x00000001 | 隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录和数据区的绝对位移的过程中使用了该值 |
0x20 | 4 | 0x00019000 | 大扇区数(Large Sector) 如果小扇区数字段的值为0,本字段就包含该FAT16分区中的总扇区数。如果小扇区数字段的值不为0,那么本字段的值为0 |
跳过包括DBR在内的3个保留扇区, 即为FAT:
前4个字节(F8 FF FF FF)作为介质描述, 不参与FAT表示簇链关系.
后面的很多FF FF表示该文件很小只占有一簇, 后面0说明该簇为空,没有文件, 再之后例如 00 57 00 58 FF FF说明该文件占有3簇.