lp1129 发表于 2008-10-24 17:02:15

关于NTFS结构MFT中数据流属性的多运行问题

以下是小弟初学NTFS底层结构时遇到一问题,即MFT中80H属性的数据运行。

单一的运行很好理解,但是多运行,有一个疑问,为什么子运行3要取反加1,fd7a0d怎么就是一个负数呢

望高手解答,不胜感激。以下是NTFS底层结构原文中的一段

214806243101f3aa 0231010d7afd3101
f338023101c34b05 00a26b81d0503de1
该运行分为
子运行1:21480624
子运行2:3101f3aa02
子运行3:31010d7afd
子运行4:3101f33802
子运行5:3101c34b05
以子运行1:“21480624”为例,“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 编辑 ]

huanggua 发表于 2011-1-12 12:47:56

楼上计算有错误
0xfd7a0d取反加1,得到0x2F5F2

应该是FFFFFFFFFF0285F4   然后起始扇区号位0cef9-285f4=4095

bb87 发表于 2011-3-22 10:02:24

楼主的例子是正确的 二楼计算才有误
页: [1]
查看完整版本: 关于NTFS结构MFT中数据流属性的多运行问题