您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > FAT32文件系统的WinHex解说示例(曹大平)
FAT32文件系统的WinHex解说示例1、WinHex获取与安装在百度上键入“WinHex”,搜索到“winhex最新官方版下载_百度软件中心”,下载后安装。运行winhex。2、WinHex使用与主引导记录(MBR)及分区表(DPT)将SD卡插入读卡器,再插入PC机的USB口,格式化为FAT32、4096字节;在桌面上建立.txt文件,用英文充满10kB以上。在winhex界面菜单上选择“Tools/OpenDisk”获得如下界面。如果选择“PhysicalMedia”下的“RM1GenericMass-Storage(954MB,USB)”,获得SD卡的物理介质存储区的0扇区的情况。该扇区的00H~1BDH共446个字节为MBR(MainBootRecord),与硬盘不同,该区域对SD卡没有意义(【1】SD结构),故,全为0;另外的64个字节(1BEH--1FDH)为DPT(DiskPartitionTable硬盘分区表)(【2】p6),分区表信息的部分放大如下图:按照本文件夹中【2】p4的说明,上述数据是按照CHS(柱面、磁头、扇区)方式进行寻址的,由于是SD卡,没有磁头等实物对应,故,从000001B0EH至000001C5H相当于00H~0BH没有解释的意义;上图中000001C6H~000001C9H通过“小端模式”(【2】p5)逆序后的数据为00000001,表示LBA(LogicBlockAddress逻辑块地址,又称为“线性寻址模式”)的起始扇区为1(注意:【2】p7中是51);000001CAH~000001CDH通过“小端模式”逆序后的数据为001DCFFF,表示LBA寻址的扇区总数为001DCFFFH=1953791,比上图左下角的数据1953792少1,即,逻辑扇区数比物理扇区数少1。3、SD卡的FAT32系统的逻辑扇区意义解说可在上面的界面中继续解释,但也可以再通过“Tools/OpenDisk”打开“Removablemedium(E:,954MB),RM1”得到逻辑扇区,下面基于该界面进行解释。该逻辑扇区依次为Bootsector、FSINFO、备份引导扇区、Reservedsector其余部分、FAT1、FAT2、Rootdirectory、DATA、Freespace、“.”目录区、Freespace、Volumeslack(松弛区域),依次解说如下。3.1Bootsector在界面上的MAP区(或存储单元数据显示区)右边是其ASCⅡ码显示区,该区域的左上角有一图标“/”,打开该图标选择“Bootsector”即可得到界面如下图所示。虽然这里的图标“/”之下的条目是“Bootsector”,但根据与硬盘的对应,这里的“Bootsector”与硬盘的DBR(DOSBootRecord操作系统引导记录区)相对应,可能是因为格式化是在Windows下进行的,而不是在DOS下进行的,所以不宜叫做DBR,而使用“Bootsector”替代DBR,但内容相似。逻辑扇区分布如下图。从上图可知,右边的条目有ClusterNo.:n/a(NotAvailable/Notapplicable;不可用/不适用),该条目下面是Bootsector引导扇区;还有LogicalsectorNo.:0;PhysicalsectorNo.:1。说明Bootsector的起始逻辑扇区是1。硬盘的DBR包括“Bootsector”及BPB(BIOSParameterBlock)两部分,这里的“Bootsector”也包括这两部分,其相关参数分别用BS_及BPB_标记,与这两个标记对应的上图的MAP部分截图如下:根据【3】,上图中部分字节的意义、偏移地址及由此而定义的变量结构如下:structFAT32_DBR{unsignedcharBS_jmpBoot[3];//跳转指令offset:0unsignedcharBS_OEMName[8];//操作系统版本名offset:3unsignedcharBPB_BytesPerSec[2];//每扇区字节数offset:11unsignedcharBPB_SecPerClus[1];//每簇扇区数offset:13unsignedcharBPB_RsvdSecCnt[2];//保留扇区数目offset:14unsignedcharBPB_NumFATs[1];//FAT表数offset:16unsignedcharBPB_HiddSec[4];//FAT区前隐扇区数offset:28unsignedcharBPB_TotSec32[4];//该卷总扇区数offset:32unsignedcharBPB_FATSz32[4];//每FAT表扇区数offset:36unsignedcharBPB_RootClus[4];//根目录簇号offset:44unsignedcharFSInfo[2];//FSINFO扇区数offset:48unsignedcharBPB_BkBootSec[2];//通常为6offset:50};对照图与变量逐一解说如下(数据做逆序):BS_jmpBoot[3]=EB5890H逆序:跳转指令的3字节机器码,与引导程序的执行有关;BS_OEMName[8]=904D53444F53352E逆序=MSDOS5.0操作系统版本名;BPB_BytesPerSec[2]=0200H=512:每扇区字节数;BPB_SecPerClus[1]=08H=8:每簇扇区数BPB_RsvdSecCnt[2]=1126H=4390:保留扇区数目BPB_NumFATs[1]=02H=2:FAT表数下一变量跳至offset:28BPB_HiddSec[4]=00000001H=1:FAT区前隐扇区数BPB_TotSec32[4]=001DCFFF=1953791:总扇区数BPB_FATSz32[4]=0000076DH=1901:每FAT表扇区数BPB_RootClus[4]=00000002H=2:根目录簇号FSInfo[2]=0001H=1:FSINFO扇区数BPB_BkBootSec[2]=0006H=6:备份引导扇区号3.2FSINFO扇区根据【2】p13,FAT32在保留区中增加了一个FSINFO扇区,用以记录文件系统中空闲簇的数量以及下一可用簇的簇号等信息,以供操作系统作为参考。紧接bootsector是FSINFO扇区,扇区号为1。查看该扇区的1EC~1EF单元的值为0000000BH,即下一可用族号为11,与DATA区查看的结果吻合。3.3备份引导扇区根据BPB_BkBootSec[2]=6,查看第6号扇区,已核实。后续为保留扇区,直到FAT1。3.4FAT1FAT2扇区仍通过左上角的图标“/”,打开“FAT1”,得到界面的放大图如下图所示。根据【3】p8,上表中,前8个字节“F8FFFF0FFFFFFFFF”为FAT32的FAT表头标记,用以表示此处是FAT表的开始。后面的数据每四个字节为一个簇项(从第2簇开始),用以标记此簇的下一个簇号。紧接的FFFFFF0F应该是表示根目录所表示的文件在第2号族结束。在FAT32中,根目录、目录等均视为文件。FFFFFF0F表示文件的结束,FFFFFFF7表示坏族(【3】p8)。第3族开始是DATA。从上图可以看出,本例文件在第9族结束。查看第10族,是SystemVolumeInformation的数据,该数据只有1族。从上图可以看到SystemVolumeInformation的起始扇区的8256。FAT2是FAT1的备份。3.5Rootdirectory仍通过左上角的图标“/”,打开“FAT1”,得到界面的放大图如下图所示。根据BPB_RootClus[4]=2,根目录簇号为2。从上图可以看到Rootdirectory的起始扇区的8192。根据【3】p9~10,每个文件的相关信息在根目录中占32字节。很明显,上图中400000~400010H两行为卷标或根目录文件信息,所具有的数据长度为0。400020~400030H两行为文件AAS.txt的相关信息,20~21即400034~400035H=0000H为文件起始簇号的高16位;26~27即40003A~40003BH=0003H为文件起始簇号的低16位,合起来可知,文件起始簇号为3;28~31即40003C~40003FH=000064CEH=25806Bytes为文件长度。3.6“.”目录扇区根目录之后是DATA、之后是Freesector、再之后是“.”目录扇区。仍通过左上角的图标“/”,打开“Searchdirectory(down)”,得到界面的放大图如下图所示。应该是表示根目录的意义。与同样位于第10族的SystemVolumeInformation的意义重叠,可以看做一回事。3.7Volumeslack(松弛扇区)仍通过左上角的图标“/”,打开“Volumeslack”,得到界面的放大图如下图所示。从上图可以看到,Volumeslack的起始LogicalsectorNo.为1,953,784,结束与1,953,790。应该具有备用的意义。通过上面的信息即可对文件进行定位,读出与写入。参考资料【1】SD卡中FAT32文件格式快速入门(图文详细介绍)(在百度下搜索“SD卡FAT32”,未下载的网站资料)【2】FAT32文件系统详解.pdf【3】FAT32简单教材.pdf
本文标题:FAT32文件系统的WinHex解说示例(曹大平)
链接地址:https://www.777doc.com/doc-4268460 .html