Fat 文件系统(1)

Mbr(master boor record)主引导记录区。它与操作系统无关,它处在0柱面,0磁道,1扇区。没有扇区的大小一般是512 bytes。在fat文件系统中的实现代码为了达到最大的兼容,一般采用扇区大小为512,尽管windows支持其他的扇区长度。在这个扇区中前446 bytes是引导代码。后面64 bytes是磁盘的分区信息。最后两个bytes是结束标志。0x55aa

 

446bytes的引导代码对用户来说一般不会有什么用处,但是64bytes的分区信息是有用的。这也是病毒经常破坏的地方。如果这里被破坏那么就不能正确地获得,分区的信息,更不能正确地读取分区上的数据内容。我们以分区表的一个表项来举例:下面是我用磁盘工具察看的u盘的第一个扇区:

Offset      0  1  2  3  4  5  6  7   8  9   A   B  C  D  E  F

 

00000000   FA 33 C 0 8E D0 BC 00 7C   8B F4 50 07 50 1F FB FC   ?缼屑.|P.P.

00000010   BF 00 06 B9 00 01 F 2 A 5  EA 1D 06 00 00 BE BE 07   ?.?.?....

00000020   B3 04 80 3C 80 74 0E 80  3C 00 75 1C 83 C 6 10 FE   ?<t.<.u..?

00000030   CB 75 EF CD 18 8B 14 8B  4C 02 8B EE 83 C 6 10 FE   藆锿.?.嬵兤.?

00000040   CB 74 1A 80 3C 00 74 F 4  BE 8B 06 AC 3C 00 74 0B   .<.t??.t.

00000050   56 BB 07 00 B4 0E CD 10  5E EB F0 EB FE BF 05 00   V?.??^腽膻?.

00000060   BB 00 7C B8 01 02 57 CD  13 5F 73 0C 33 C 0 CD 13   ?|?.W?_s.3.

00000070   4F 75 ED BE A3 06 EB D3  BE C2 06 BF FE 7D 81 3D   Ou?胗韭.}?

00000080   55 AA 75 C 7 8B F5 EA 00  7C 00 00 49 6E 76 61 6C    U猽菋蹶.|..Inval

00000090   69 64 20 70 61 72 74 69  74 69 6F 6E 20 74 61 62   id partition tab

000000A 0   6C 65 00 45 72 72 6F 72  20 6C 6F 61 64 69 6E 67   le.Error loading

000000B0   20 6F 70 65 72 61 74 69  6E 67 20 73 79 73 74 65    operating syste

000000C 0   6D 00 4D 69 73 73 69 6E  67 20 6F 70 65 72 61 74    m .Missing operat

000000D0   69 6E 67 20 73 79 73 74  65 6D 00 00 00 00 00 00   ing system......

000000E0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

000000F 0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000100   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000110   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000120   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000130   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000140   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000150   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000160   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000170   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000180   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00000190   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

000001A 0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

000001B0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 80 01   ..............€.

000001C 0   01 00 0B 0F E0 FF 20 00  00 00 E0 E4 07 00 00 00   ....? .......

000001D0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

000001E0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

000001F 0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 AA   ..............U

 

0x1be——0x1fd这个64个字节就是分区表,其中0x1be——0x1cd是一个分区,一位u盘只有一个分区,所以后面的就全是0。这些字节代表的意思如下:

第一个字节是:分区活动标志,

第二,三,四字节是本分区开始的磁头,扇区,柱面号。

第五个字节是:文件系统的类型标记。

分区类型符为:

  00H——表示该分区未用

  06H——FAT16基本分区

  0BH——FAT32基本分区

  05H——扩展分区

  07H——NTFS分区

  0FH——(LBA模式)扩展分区

  83H—— Linux分区

第六,七,八字节是结束磁头号,扇区号,柱面号。

第九,十,十一,十二是本分区之前已经用的扇区数。

第十三,十四,十五,十六是本分区的总扇区数。

根据这些信息我们可以找到这个分区,我们注意到9101112字节是本分区之前已经用的扇区数,因为扇区编号从0开始,所以这个扇区的数也就是本分区开始的扇区号。但是还要注意计算方式,我们按照上面截取的数据来说明,第9101112字节的内容是:20 00 00 00,我们计算时要把它倒过来,也就是00 00 00 20,其实就是0x20,十进制就是32,也就是说在本分区之前已经有32个扇区被使用;那么本分区的扇区号就是32。把它转换成磁盘的地址空间,就是32*512(扇区大小为512bytes = 0x00004000处。从这个开始的第一个扇区就是我们常说的dbr区,下面我们把此处的第一扇区的内容复制到下面:

Offset      0  1  2  3  4  5  6  7   8  9   A   B  C  D  E  F

 

00004000   EB 58 90 4D 53 44 4F 53  35 2E 30 00 02 04 22 00   隭怣SDOS5.0...".

00004010   02 00 00 00 00 F 8 00 00  3F 00 FF 00 20 00 00 00   .....?.?.. ...

00004020   E0 E4 07 00 EF 03 00 00  00 00 00 00 02 00 00 00   ..?..........

00004030   01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00004040   00 00 29 3C 89 C 3 FC 4E  4F 20 4E 41 4D 45 20 20   ..)<壝麼O NAME 

00004050   20 20 46 41 54 33 32 20  20 20 33 C 9 8E D1 BC F4     FAT32   3蓭鸭?

00004060   7B 8E C1 8E D9 BD 00 7C   88 4E 02 8A 56 40 B4 08   {幜庂?|.@?

00004070   CD 13 73 05 B9 FF FF 8A   F1 66 0F B 6 C 6 40 66 0F    ?s.?婑f.@f.

00004080   B6 D1 80 E2 3F F7 E2 86  CD C0 ED 06 41 66 0F B7   堆€?麾喭理.Af.?

00004090   C 9 66 F 7 E1 66 89 46 F 8  83 7E 16 00 75 38 83 7E   蒮麽f塅鴥~..u8

000040A 0   2A 00 77 32 66 8B 46 1C   66 83 C 0 0C BB 00 80 B9   *.w 2f .f.??

000040B0   01 00 E8 2B 00 E9 48 03   A 0 FA 7D B4 7D 8B F 0 AC    ..?..}磢嬸?

000040C 0   84 C 0 74 17 3C FF 74 09  B4 0E BB 07 00 CD 10 EB   t.<t.??.??

000040D0   EE A0 FB 7D EB E 5 A 0 F 9  7D EB E0 98 CD 16 CD 19   顮鹽脲狔}豚樛.?

000040E0   66 60 66 3B 46 F 8 0F 82  4A 00 66 6A 00 66 50 06    f `f;F?.fj.fP.

000040F 0   53 66 68 10 00 01 00 80  7E 02 00 0F 85 20 00 B4   Sfh....€~...?.?

00004100   41 BB AA 55 8A 56 40 CD  13 0F 82 1C 00 81 FB 55    A U@?.?.U

00004110   AA 0F 85 14 00 F 6 C 1 01  0F 84 0D 00 FE 46 02 B4   ??...?..?

00004120   42 8A 56 40 8B F4 CD 13  B 0 F 9 66 58 66 58 66 58   B@?fXfXfX

00004130   66 58 EB 2A 66 33 D2 66  0F B7 4E 18 66 F 7 F 1 FE   fX?f3..f?

00004140   C 2 8A CA 66 8B D0 66 C 1  EA 10 F 7 76 1A 86 D6 8A    聤蔲嬓f..?

00004150   56 40 8A E 8 C 0 E4 06 0A   CC B8 01 02 CD 13 66 61   V@婅冷....?fa

00004160   0F 82 54 FF 81 C 3 00 02  66 40 49 0F 85 71 FF C3   .俆伱..f@I.卶?

00004170   4E 54 4C 44 52 20 20 20  20 20 20 00 00 00 00 00   NTLDR      .....

00004180   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

00004190   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

000041A 0   00 00 00 00 00 00 00 00  00 00 00 00 0D 0A 52 65   ..............Re

000041B0   6D 6F 76 65 20 64 69 73  6B 73 20 6F 72 20 6F 74   move disks or ot

000041C 0   68 65 72 20 6D 65 64 69  61 2E FF 0D 0A 44 69 73   her media...Dis

000041D0   6B 20 65 72 72 6F 72 FF  0D 0A 50 72 65 73 73 20   k error..Press

000041E0   61 6E 79 20 6B 65 79 20  74 6F 20 72 65 73 74 61   any key to resta

000041F 0   72 74 0D 0A 00 00 00 00  00 AC CB D8 00 00 55 AA   rt.......?.U

 

这就是启动扇区(boot sector),其中有一个很重要的块叫做bpbbios 参数块)。我们选择几个重要的数据进行说明,这里的重要是对我来说很重要的,我在实现fat的文件系统。首先是偏移地址111200 02,它表示没一个扇区占的字节数,它的计算方法和前面的一样,就是ox200,也就是512bytes;偏移13处代表每簇多少扇区。这里是04,就是每簇包含4个扇区;偏移1415是保留区的扇区数,这里是34个保留区,偏移16就是fat表的个数,一般这里是2,这两个fat表是一样的,为了备份数据;偏移17是根目录中项计数,对已fat32来说是0;在偏移1718处是fat12/16的表结构占用的扇区数,对于fat32文件系统此处设置为0,在偏移36处的4个字节是fat32的一个fat表结构占用的扇区数,需要注意的是这个地方不能同时被设置。因为我的文件系统是fat32,我们只关心偏移36处的4个字节,经计算我们得出一个fat表占用1007个扇区。Fat区紧贴着保留区,另外扇区的标号0扇区开始,从mbr所在的扇区开始标号。两个fat表是连在一起存放的。之后有个根目录区,根目录后面就是数据区了。未完待续。有不准确的地方希望大家指正。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值