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

[复制链接]

该用户从未签到

1

主题

167

回帖

104

积分

[INTOHARD]工兵

Rank: 1

积分
104
发表于 2008-10-24 17:02:15 | 显示全部楼层 |阅读模式
以下是小弟初学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 编辑 ]
  • TA的每日心情
    慵懒
    2015-8-26 20:12
  • 签到天数: 29 天

    [LV.4]七品知县

    2

    主题

    201

    回帖

    197

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    197
    发表于 2011-1-12 12:47:56 | 显示全部楼层
    楼上计算有错误
    0xfd7a0d取反加1,得到0x2F5F2  

    应该是FFFFFFFFFF0285F4   然后起始扇区号位0cef9-285f4=4095
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    25

    回帖

    1917

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1917
    发表于 2011-3-22 10:02:24 | 显示全部楼层
    楼主的例子是正确的 二楼计算才有误
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表