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。
前446个bytes的引导代码对用户来说一般不会有什么用处,但是64bytes的分区信息是有用的。这也是病毒经常破坏的地方。如果这里被破坏那么就不能正确地获得,分区的信息,更不能正确地读取分区上的数据内容。我们以分区表的一个表项来举例:下面是我用磁盘工具察看的u盘的第一个扇区:
Offset 0 1 2 3 4 5 6 7 8
00000000 FA
00000010 BF 00 06 B9 00
00000020 B3 04 80
00000030 CB 75 EF CD 18 8B 14 8B
00000040 CB 74
00000050 56 BB 07 00 B4 0E CD 10 5E EB F0 EB FE BF 05 00 V?.??^腽膻?.
00000060 BB 00
00000070
00000080 55 AA
00000090 69 64 20 70 61 72 74 69 74 69
000000B0 20
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 ................
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 ................
000001B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 ..............€.
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 ................
从0x1be——0x1fd这个64个字节就是分区表,其中0x1be——0x1cd是一个分区,一位u盘只有一个分区,所以后面的就全是0。这些字节代表的意思如下:
第一个字节是:分区活动标志,
第二,三,四字节是本分区开始的磁头,扇区,柱面号。
第五个字节是:文件系统的类型标记。
分区类型符为:
00H——表示该分区未用
06H——FAT16基本分区
0BH——FAT32基本分区
05H——扩展分区
07H——NTFS分区
0FH——(LBA模式)扩展分区
83H—— Linux分区
第六,七,八字节是结束磁头号,扇区号,柱面号。
第九,十,十一,十二是本分区之前已经用的扇区数。
第十三,十四,十五,十六是本分区的总扇区数。
根据这些信息我们可以找到这个分区,我们注意到9,10,11,12字节是本分区之前已经用的扇区数,因为扇区编号从0开始,所以这个扇区的数也就是本分区开始的扇区号。但是还要注意计算方式,我们按照上面截取的数据来说明,第9,10,11,12字节的内容是: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
00004000 EB 58 90 4D 53 44
00004010 02 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
00004050 20 20 46 41 54 33 32 20 20 20
00004060 7B 8E C1 8E D9 BD 00
00004070 CD 13 73 05 B9 FF FF
00004080 B6 D1 80 E2
000040B0 01 00 E8 2B 00 E9 48
000040D0 EE A0 FB 7D EB E
000040E0 66 60 66 3B
00004100 41 BB AA 55
00004110 AA
00004120 42
00004130 66 58 EB
00004150 56 40
00004160
00004170 4E 54
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 ................
000041B0 6D
000041D0 6B 20 65 72 72
000041E0 61 6E 79 20 6B 65 79 20 74
这就是启动扇区(boot sector),其中有一个很重要的块叫做bpb(bios 参数块)。我们选择几个重要的数据进行说明,这里的重要是对我来说很重要的,我在实现fat的文件系统。首先是偏移地址11,12处00 02,它表示没一个扇区占的字节数,它的计算方法和前面的一样,就是ox200,也就是512bytes;偏移13处代表每簇多少扇区。这里是04,就是每簇包含4个扇区;偏移14,15是保留区的扇区数,这里是34个保留区,偏移16就是fat表的个数,一般这里是2,这两个fat表是一样的,为了备份数据;偏移17是根目录中项计数,对已fat32来说是0;在偏移17,18处是fat12/16的表结构占用的扇区数,对于fat32文件系统此处设置为0,在偏移36处的4个字节是fat32的一个fat表结构占用的扇区数,需要注意的是这个地方不能同时被设置。因为我的文件系统是fat32,我们只关心偏移36处的4个字节,经计算我们得出一个fat表占用1007个扇区。Fat区紧贴着保留区,另外扇区的标号0扇区开始,从mbr所在的扇区开始标号。两个fat表是连在一起存放的。之后有个根目录区,根目录后面就是数据区了。未完待续。有不准确的地方希望大家指正。
- Fat 文件系统(1)
- FAT文件系统原理1
- Fat 文件系统(2)
- FAT文件系统原理(转)
- FAT文件系统原理(转)
- FAT文件系统原理(一)
- FAT文件系统
- FAT文件系统
- FAT文件系统
- FAT文件系统
- fat文件系统
- 对于文件系统的研究(Fat、yaffs)
- FAT文件系统理解(持续更新)
- 文件系统:FAT(FAT16),FAT32,VFAT,NTFS
- FAT文件系统原理(二)
- FAT文件系统原理(三)
- FAT文件系统原理
- FAT文件系统原理(四)
- mysql+php乱码原理与解决
- [转]网站二级域名用.net 2.0实现方案
- Windows API学习(1)-MessageBox
- 为什么在java中计算6/3*5的结果是0呢??
- 使用SQL Server 2005 JDBC 连接SQL Server 2008 !
- Fat 文件系统(1)
- 一个使用J2ME技术实现的计算器的代码
- jboss的web service soap:address 的问题
- svg基础 4 坐标和变换
- oracle的监测TABLE数据更改情况
- lucene 一个关键字多字段查询
- 网站开发(Net)
- LoadIcon function usage:
- 汉字拼音对照文件(a-q) - 柳永法(yongfa365)??Blog