准备:
1、一张干净的1.44MB软盘,使用windows98附带的Dos进行完全格式化;
2、使用sys命令向磁盘传送系统文件;
3、立刻将磁盘做成镜像(保证磁盘的“干净”)。
FAT12的结构网上有很多,这里不进行累述。
下面是针对镜像文件进行的数据分析(下面提到的地址范围只指用UE等打开之后看到的地址)。
0面0道第2扇区到第10扇区的9个扇区是FAT表的存放位置
FAT地址范围:0x0200 ~ 0x13FF
0面0道的第11扇区到1面0道第1扇区的9个扇区是第2个FAT表的存放位置,这第2个FAT是备用的
备份FAT地址范围:0x1400 ~ 0x25FF
1面0道的第2扇区起到1面0道的第15扇区(共14个扇区)用于存放 FDT。
FDT起始地址:0x2600 ~ 0x41FF
以IO.SYS为例:
0x2600~0x260A :文件名
0x260B:07:只读、隐藏的系统文件
0x260C~0x2615:保留
0x2616~0x2617:20A0=0xA020(10100 000001 00000):文件最后修改时间20:01:00
0x2618~0x2619:D324=0x24D3(0010010 0110 10011):文件最后修改日期1998/06/19
0x261A~0x261B:0200:文件首簇号002,其他附后
0x261C~0x261F:966B0300=0x00036B96:文件的长度224150Byte
文件簇号分析:
其中,簇号0x002可知:
逻辑扇区号 = 0x002+31 = 33
因此,IO.SYS文件的存储起始位置为:逻辑扇区号 * 512 = 0x04200
文件首簇号002指向的位置为:0x200+(0x002*3/2)=0x200+3=0x203+0(簇号从0x203开始)。
因为0能被3整除(姑且这样认为),因此,簇号002指向的位置为0x203+0=0x203的位置。
0x203位置的数据为034000=0x004003,即第二簇为003
以MSDOS.SYS为例:
文件首簇号0x23F,可知:
逻辑扇区号 = 0x23F+31 = 606
因此,MSDOS.SYS文件的存储起始位置为:逻辑扇区号 * 512 = 0x4BC00
文件首簇号23F指向的位置为:0x200+(0x23F*3/2)=0x200+862.5=0x203+859.5。
因为858能被3整除,因此,簇号23F指向的位置为0x203+858=0x55D后面的1.5个位置。
0x55D位置的数据为FFFFFF=0xFFFFFF,因此簇号23F指向的内容为高12bit的0xFFF。
即MSDOS.SYS的第一簇为文件的最后一簇。