| 关键词: 分区表 00 磁头 区号 1111 起始 反向 头号 表链 一个 |
三.分区表链的查找分区表链实际上相当于一个单向链表结构。第一个分区表,也即主分区表,可以有一项 描述扩展分区。而这一项就相当于指针,指向扩展分区。然后我们根据该指针来到扩展分 区起始柱面的0头1扇区,找到第二个分区表。对于该分区表,通常情况下:第一项描述了 扩展分区中第一个分区的信息,第二项描述下一个分区,而这第二项就相当于指向第二个分 区的指针,第三项,第四项一般均为0。我们可以根据该指针来到扩展分区中第二个分区起 始柱面的0头1扇区,找到第三个分区表。以此类推,只到最后一个分区表。而最后一个分 区表只有第一项有信息,余下三项均为0.相当于其指针为空.所以只要找到了一个分区表就可 以推导找出其后面所有分区表。不过该分区表前面的分区表就不好推导出来了。但令人高兴 的是这个链表的头节点,也即主分区表的位置是固定的位于(0柱面, 0磁头, 1扇区)处, 我们可以很轻易的找到它,然后把剩下的所有分区表一一找到。以笔者的硬盘为例:一个主分区(C盘), 一个扩展分区.扩展分区中有两个逻辑分区(D盘,E盘)其分区表链示意图如下:图一 分区表链示意图(一).读取(0柱面,0磁头,1扇区)处C盘的主分区表:[80 01 01 00 0B FE 7F FD 3F 00 00 00 3F 04 7D 00 ][00 00 41 FE 0F FE FF FF 7E 04 7D 00 1F 2C B4 00 ][00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ][00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]第一项:(80)(01 01 00)(0B)(FE 7F FD )(3F 00 00 00 )(3F 04 7D 00)描述的是C盘的情况。1.(80):表示C盘为活动分区。即系统会从C盘启动。2.(01 01 00):表示C盘的起始扇区为(0柱面,0磁头,1扇区)。3.(0B):表示C盘的文件系统为FAT32。4.(FE 7F FD):(FE) 16 = (254) 10 (7F) 16 = (0111 1111) 2 (FD) 16 = (1111 1101) 2磁头号:(254) 10;扇区号:(11 1111) 2 = (63) 10.柱面号:(01 1111 1101) 2 = (509) 10故C盘结束扇区为(509柱面,254磁头,63扇区)。5.(3F 00 00 00):反向,(00 00 00 3F) 16 = (63) 10,为C盘起始逻辑扇区号与逻辑0扇区号之差。表示C盘前面已有63个扇区,这63个扇区为系统隐藏扇区。6. (3F 04 7D 00):反向,(00 7D 04 3F) 16 = (8193087) 10。表明C盘有8193087个扇区。即(0柱面,1磁头,1扇区)至(509柱面,254磁头,63扇区)共有8193087个扇区。第二项:(00)(00 41 FE)(0F)(FE FF FF)(7E 04 7D 00)(1F 2C B4 00)描述的是扩展分区的情况。1. (00): 表示该分区不是活动分区。2. (00 41 FE):(00) 16 = (0) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110) 2磁头号:(0) 10;扇区号:(00 0001) 2 = (1) 10.柱面号:(01 1111 1110) 2 = (510) 10所以扩展分区的起始扇区为(510柱面,0磁头,1扇区)。3. (0F): 表示该分区为扩展分区。4. (FE FF FF):(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2;磁头号:(254) 10;扇区号:(11 1111) 2 = (63) 10.柱面号:(11 1111 1111) 2 = (1023) 10但这是不准确的,因为当柱面号的真实值超过1023时,表示柱面号的10位也依然是1023。5. (7E 04 7D 00):反向,(00 7D 04 7E) 16 = (8193150) 10. 表示扩展分区的起始扇区号为8193150,即(510 柱面,0磁头,1扇区)。这是真实准确的,我一般都用这一项来定位分区起点。6. (1F 2C B4 00):反向, (00 B4 2C 1F) 16 = (11807775) 10. 表示扩展分区共有11807775个扇区。通过上面得到的起点和分区的大小,可以推导出扩展分区的结束位置:8193150 + 11807775 = 20000925号扇区,即(1244 柱面,254磁头,63扇区)。二.查找D盘分区表 根据上面的信息,第二个分区表,也即D盘分区表在(510柱面,0磁头,1扇区)处。读取该扇区,得到分区表如下:[00 01 41 FE 0B FE FF 7B 3F 00 00 00 BF A3 5D 00 ][00 00 C1 7C 05 FE FF FF FE A3 5D 00 21 88 56 00 ][00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ][00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]第一项:(00)(01 41 FE)(0B)(FE FF 7B)(3F 00 00 00 )(BF A3 5D 00)描述的是D盘的情况。1.(00):表示D盘不是活动分区。2.(01 41 FE):(01) 16 = (1) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110) 2.磁头号:(1) 10;扇区号:(00 0001) 2 = (1) 10.柱面号:(01 1111 1110) 2 = (510) 10;故D盘开始扇区为(510柱面,1磁头,1扇区)。3.(0B):表示D盘的文件系统为FAT32。4.(FE FF 7B):(FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (7B) 16 = (0111 1011) 2.磁头号:(254) 10;扇区号:(11 1111) 2 = (63) 10.柱面号:(11 0111 1011) 2 = (891) 10故D盘结束扇区为(891柱面,254磁头,63扇区)。5.(3F 00 00 00):反向,(00 00 00 3F)16 = (63)10,为D盘起始逻辑扇区号(510柱面,1磁头,1扇区)与扩展分区起始逻辑扇区号(510柱面,0磁头,1扇区)之差。表示D盘前面已有63个扇区,这63个扇区为系统隐藏扇区。6. (BF A3 5D 00):反向,(00 5D A3 BF) 16 = (6136767) 10。表明D盘有6136767个扇区。通过上面得到的起点和分区的大小,可以推导出D盘的结束位置:8193150 + 63 + 6136767 = 14329980号扇区。即(891柱面,254磁头,63扇区)。与上面的正好吻合。第二项:(00)(00 C1 7C)(05)(FE FF FF)(FE A3 5D 00)(21 88 56 00)描述的是E盘的情况。1. (00): 表示E盘不是活动分区。2. (00 C1 7C):(00) 16 = (0) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2磁头号:(0) 10扇区号:(00 0001) 2 = (1) 10柱面号:(11 0111 1100) 2 = (892) 10所以E盘的起始扇区为(892柱面,0磁头,1扇区)。3. (05): 表示E盘的在扩展分区里面。4.(FE FF FF):(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2磁头号:(254) 10扇区号:(11 1111) 2 = (63) 10柱面号:(11 1111 1111) 2 = (1023) 10但这是不准确的,原因同上。5.(FE A3 5D 00):反向,(00 5D A3 FE) 16 = (6136830) 10. 这一项非常重要,它定位了E盘分区表所在扇区。其值为E盘分区表所在扇区号与扩展分区起始扇区号之差。所以,E盘分区表所在扇区号为:8193150 + 6136830 = 14329980。即(892柱面,0磁头,1扇区)。6.(21 88 56 00):反向,(00 56 88 21) 16 = (5670945) 10.表示E盘共有11807775个扇区。通过上面得到的起点和分区的大小,可以推导出E盘的结束位置:14329980 + 5670945 = 20000925号扇区,即(1244 柱面,254磁头,63扇区)。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|