VBR的12个扇区中最后3个扇区(扇区9,10,11)不包含结束标志。扇区11存放包含启动代码扇区(也就是前9个扇区)的校验数据,这个校验数据是一个32位整型值,占用4个字节。这4个字节重复出现充满整个扇区。如果修改VBR的BPB的值或修改启动代码(例如启动型病毒),要重新计算校验数据并更新11扇区。
图3 WinHex显示的VBR的校验扇区数据
图3是校验扇区,校验为0xD80F4E86,每4字节重复一次布满整个校验扇区,例如扇区大小为512字节,它重复128次。
表6 VBR校验计算程序的C代码
UINT32 VBRChecksum(const unsigned char octsts[],long NumberOfBytes) { UINT32 Checksum = 0; long Index; for (Index = 0; Index < NumberOfBytes; Index++) { if (Index == 106 || Index == 107 || Index == 112) { continue; } Checksum = ((Checksum <<31) | (Checksum>> 1)) + (UINT32) octsts[Index]; } return Checksum; }
FAT32的VBR通常位于32个保留扇区中,主VBR有3个扇区,分别为扇区0,1,2。备份VBR位于扇区6,7,8.(Mueller 2003)。在FAT32 VBR中可执行的启动代码位于第1扇区(扇区0)和第3扇区(扇区2),而exFAT VBR则有9个扇区可以存放启动代码。
评论前必须登录!
注册