MTK6268-FAT

news/2024/11/17 6:19:26/

1. MBR(Master Boot Record)

 

 

 

高亮前的446个字节为MBR引导代码,

之后为DPT(Disk Patition Table)占64个字节, 再之后两位(55 AA(101010110101010))位结束符.(第1扇区结束)

 

DPT结构:

分区表第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位。最后两位(67)被结束柱面字段所使用

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(操作系统引导记录区)

结构如下:

 

一个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) 硬件扇区的大小。本字段合法的十进制值有512102420484096。对大多数磁盘来说,本字段的值为512

0x0D

1

0x04(2K)

每簇扇区数(Sectors Per Cluster) 一个簇中的扇区数。由于FAT16文件系统只能跟踪有限个簇(最多为65536)。因此,通过增加每簇的扇区数可以支持最大分区数。分区的缺省的簇的大 小取决于该 分区的大小。本字段合法的十进制值有 1248163264128。导致簇大于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簇.


http://www.ppmy.cn/news/177074.html

相关文章

P6268 [SHOI2002]舞会 题解

博客园同步 原题链接 前置知识&#xff1a; 匈牙利算法 简要题意&#xff1a; 求图的二分图最大独立集。 二分图最大独立集指&#xff1a;最大的一个点集使得每两个点都不在同一边上的这个点集的大小。 你会发现&#xff0c;这和 二分图最大匹配 似乎是有联系的。 给出…

洛谷 P6268 [SHOI2002]舞会(二分图最大独立集)

[SHOI2002]舞会 题目描述 某学校要召开一个舞会。已知学校所有 n n n 名学生中&#xff0c;有些学生曾经互相跳过舞。当然跳过舞的学生一定是一个男生和一个女生。在这个舞会上&#xff0c;要求被邀请的学生中的任何一对男生和女生互相都不能跳过舞。求这个舞会最多能邀请多…

[HDU6268]Master of Subgraph

[HDU6268]Master of Subgraph 题目大意&#xff1a; 一棵\(n(n\le3000)\)个结点的树&#xff0c;每个结点的权值为\(w_i\)。给定\(m(m\le10^5)\)&#xff0c;对于任意\(i\in[1,m]\)&#xff0c;问书中是否有一个连通子图的权值和等于\(i\)。 思路&#xff1a; 重心剖分。考虑处…

【力扣周赛#324】6266. 使用质因数之和替换后可以取到的最小值+6267. 添加边使所有节点度数都为偶数+6268. 查询树中环的长度

目录 6265. 统计相似字符串对的数目 - ac 6266. 使用质因数之和替换后可以取到的最小值 分解质因数 1、tle代码 2、优化ac代码 6267. 添加边使所有节点度数都为偶数 - 建图分类讨论 关于建图 6268. 查询树中环的长度 - LCA最近公共祖先 6265. 统计相似字符串对的数目…

LOJ6268拆分数

/*相当于每种物品都有无限个的背包毕竟考场上写exp是个比较危险的行为对数据进行根号分治是个比较好的方法对于小于等于根号的部分暴力背包转移 对于大于根号的 最多只会拿根号个 dp一下就好了*/ #include<cstdio> #include<algorithm> #include<cstring> #i…

UVALive - 6268 Cycling 贪心

UVALive - 6268 Cycling 题意&#xff1a;从一端走到另一端&#xff0c;有T个红绿灯&#xff0c;告诉你红绿灯的持续时间&#xff0c;求最短的到达终点的时间。x 思路&#xff1a; 转载于:https://www.cnblogs.com/macinchang/p/4753611.html

LOJ #6268. 分拆数

可以先将问题建模为 &#xff1a; 物品大小为1~inf 且每件物品数量无限 的背包选体积为1~n的方案数。 显然物品体积只有1~n有用&#xff0c;我们不妨把 体积1~sqrt(n) 的物品先暴力插入到背包中&#xff0c;设这一部分最后 体积i的方案数是 A[i] 。 考虑体积>sqrt(n)的物品怎…

[HDU6268]Master of Subgraph 树分治+bitset

bitset用法 bitset<B_Length> array[A_SIZE] 创建一个长度为B_Length,大小为A_SIZE的数组 bitset<B> a(n) 初始化一个值为n的bitset .reset() 将所有位初始化为0 .set() …