Fat 文件系统(1)

来源:互联网 发布:手机直播声音软件 编辑:程序博客网 时间:2024/06/05 03:36

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 C0 8E D0 BC 00 7C  8B F4 50 07 50 1F FB FC   ?缼屑.|P.P.

00000010   BF 00 06 B9 00 01 F2 A5  EA 1D 06 00 00 BE BE 07   ?.?.?....

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

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

00000040   CB 74 1A 80 3C 00 74 F4  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 C0 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 C7 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

000000A0   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

000000C0   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   ................

000000F0   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   ................

000001A0   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   ..............€.

000001C0   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   ................

000001F0   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 F8 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 C3 FC 4E  4F 20 4E 41 4D 45 20 20   ..)<壝麼O NAME 

00004050   20 20 46 41 54 33 32 20  20 20 33 C9 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 B6 C6 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   C9 66 F7 E1 66 89 46 F8  83 7E 16 00 75 38 83 7E   蒮麽f塅鴥~..u8

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

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

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

000040D0   EE A0 FB 7D EB E5 A0 F9  7D EB E0 98 CD 16 CD 19   顮鹽脲狔}豚樛.?

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

000040F0   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   AU@?.?.U

00004110   AA 0F 85 14 00 F6 C1 01  0F 84 0D 00 FE 46 02 B4   ??...?..?

00004120   42 8A 56 40 8B F4 CD 13  B0 F9 66 58 66 58 66 58   B@?fXfXfX

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

00004140   C2 8A CA 66 8B D0 66 C1  EA 10 F7 76 1A 86 D6 8A   聤蔲嬓f..?

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

00004160   0F 82 54 FF 81 C3 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   ................

000041A0   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

000041C0   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

000041F0   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表是连在一起存放的。之后有个根目录区,根目录后面就是数据区了。未完待续。有不准确的地方希望大家指正。

 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 mi4c不支持4G怎么办 小米手机抢不到怎么办 洗衣机外壳凹了怎么办 塑料手机套变黄怎么办 淘宝上没货了怎么办啊 华为手机音量低怎么办 手机电池冲鼓了怎么办 手机电池起鼓了怎么办 手机信息总提示怎么办 一体机电池不耐用怎么办 血糖偏高怎么办雅培益力佳SR 投诉电话打不通怎么办 宝宝换奶粉拉肚子怎么办 微店没有客源怎么办 itunes文件被保护怎么办 魅族e1黑屏了怎么办 窗帘打孔的扣环怎么办 棉质裤子掉色怎么办 孕期喝咖啡了怎么办 实体店买到假手机怎么办 派派提现没有那么多好友怎么办 派派提现没有支付宝怎么办 电脑电源不够用怎么办 电脑电源不够会怎么办 中行信用卡异常了怎么办 美借还款后秒拒怎么办 海尔空调关不了怎么办 华为p9无服务怎么办 贝贝买到假货怎么办 京东不予退货怎么办? 咸鱼收到货不对怎么办 闲鱼没收到货怎么办 淘宝购物不到货怎么办 百世快递不派送怎么办 圆通快递不派送怎么办 无卡存款没到账怎么办 中国银行分行冻结信用卡怎么办 银行信用卡没还怎么办 免税店提货单丢了怎么办 店长故意整我怎么办 被康妆大道骗了怎么办