|
以下是小弟初学NTFS底层结构时遇到一问题,即MFT中80H属性的数据运行。
单一的运行很好理解,但是多运行,有一个疑问,为什么子运行3要取反加1,fd7a0d怎么就是一个负数呢
望高手解答,不胜感激。以下是NTFS底层结构原文中的一段
21 48 06 24 31 01 f3 aa 02 31 01 0d 7a fd 31 01
f3 38 02 31 01 c3 4b 05 00 a2 6b 81 d0 50 3d e1
该运行分为
子运行1:21 48 06 24
子运行2:31 01 f3 aa 02
子运行3:31 01 0d 7a fd
子运行4:31 01 f3 38 02
子运行5:31 01 c3 4b 05
以子运行1:“21 48 06 24”为例,“2”表示后面4个字节中后面2个字节是子运行的起始簇号,即子运行的起始簇号为“24 06”,“1”表示前面的1个字节表示子运行的大小,即该子运行的大小为“48”。所以该文件数据实际是从起始扇区号为0x2406的地方,占用0x48个簇。接下来是子运行2,运行2的簇号的起始位置为0x2406 + 0x02aaf3 = 0x2cef9。占用0x01个簇。接下来是子运行3,按照前面的理论,子运行3的起始簇号应该是0x2cef9+0xfd7a0d。但是0xfd7a0d的第一个字节为1(fd的首字节),证明此数为负数,所以不能简单的做加法,而应该取该数的补数来计算。既,0xfd7a0d取反加1,得到0x2F5F2,所以运行3的起始扇区号为0x2cef9 - 0x285f3 = 0x4096。占用0x01个簇。依此类推直到子运行之后为“00”时结束。
[ 本帖最后由 lp1129 于 2008-10-24 17:06 编辑 ] |
|