首先,打开U盘,现在基本都是NTFS文件系统,重新在网上买了一个FAT32的U盘:
用winhex打开其逻辑磁盘:
然后根据分析分析:
首先是DBR部分:
FAT引导记录的前3个字节是跳转指令(Jump Instruction),用于跳转到引导代码的执行位置。这个指令告诉系统在引导记录中的哪个位置开始执行代码。它通常是一个无条件跳转指令,将控制权转移到引导代码的起始位置。
如果FAT引导记录的00号、01号、02号字节存储的是0xEB、0x58、0x90,代表这是一个有效的FAT引导记录的跳转指令。这个跳转指令告诉系统在引导记录中的哪个位置开始执行代码。具体解释如下:
00号字节(0xEB)是跳转指令的操作码,表示无条件跳转。
01号字节(0x58)是跳转指令的目标地址的相对偏移量。在这种情况下,偏移量为0x58,表示跳转到引导记录的第88个字节处。
02号字节(0x90)是NOP指令,用于填充指令的长度。
所以,这个跳转指令告诉系统从引导记录的第88个字节处开始执行代码。
OEM名称(OEM Name):引导记录的第3到第10字节是OEM名称,用于标识制造商或开发商。它通常是一个8字节的字符串,如"MSDOS5.0"。
BPB字段:
前两个字节为0x0200:十进制为512,也就是每个扇区512个字节。
后一个字节为0x40:十进制64,也就是每簇64个扇区,32768个字节,32kB大小
用“Chkdsk”命令查看信息中可以对应:
之后的两个字节为0x0036:十进制为54,也就是FAT表起始位置为第54个扇区处
之后的两个字节为0x02:十进制为2,也就是有两个FAT表,第二个表为第一个表的备份
之后的两个字节,为根目录项数,FAT32以突破该限制,无效,故为0x0000
之后的两个字节,为扇区总数,小于32M使用,故为0x0000
之后的一个字节,为存储介质描述负,为0xF8,表示该FAT32文件系统的存储介质是一个固定磁盘
之后的两个字节,为每FAT表占用扇区数 ,小于32M使用,故为0x0000
之后的两个字节0x003F,为逻辑每磁道扇区数
之后的两个字节0x00FF,为逻辑磁头数
之后的四个字节0x00000040,为系统隐含扇区数
之后的四个字节0x0752FE60,为扇区总数,大于32M使用
之后的四个字节0x00003A95,为每FAT表扇区数,大于32M使用
之后的两个字节0x0000,标记
之后的两个字节0x0000,版本(通常为0)
之后的四个字节0x00000002,根目录起始簇
之后的两个字节0x0001,Boot占用扇区数
之后的两个字节0x0006,备份引导扇区位置
之后的十四个字节,为保留字段
之后的一个字节0x29,为扩展引导标记
之后的四个字节0x00CF51F3,为序列号
之后的十个字节0x202020454D414E204F4E,为卷标,转成字符即“NO NAME”
之后的八个字节0x2020203233544146,文件系统,转成字符即“FAT32”
引导程序代码:
有效结束标志:
第二是FSINFO部分:
前四个字节就是扩展引导标志,前面就是0xAA55
在0x3E4,也就是偏移为0x1E4的地方是签名,之后的四个字节0x001D36EE,为空闲簇数,在引导区中可知一个簇32K,经计算,有58G空间,而属性中标识:基本是准的
后四个字节0x00001338为下一个可用簇号
之后为14字节的未用部分,为全0,之后即是0x55AA的结束标志
第三是FAT表部分:
由引导记录中的BPB结构可知,整个保留区(也就是DBR+FSINFO)占54个扇区,共27648个字节,故可找到FAT表的起始部分:
FAT表访问是几号簇中填的谁下一个簇就是谁
首先0号簇和1号簇中的
为FAT的开始标识,通常2号簇为根目录,其号为0xFFFFFFF,即为根目录大小占一个簇,而此时我们的U盘中只有四个文件:
而其中test1.txt和test2.txt大小仅占32k(一个簇):
所以在FAT表中就是第三号簇和第四号簇,我们可以发现,第五号簇中填的第六个,以此类推,一直向下找,找到这个文件的结束符号:
从第五号簇到这部分就是我们最大的那个exe:
之后的这部分就是剩余的PDF的簇区间:
可知PDF文件大小:
在winhex中刚好占有15个簇。
FAT表至此结束,之后的就是未分配的空间,故全为0。
标签:引导,字节,FAT32,扇区,FAT,文件系统,之后,跳转,解析 From: https://blog.csdn.net/weixin_54452942/article/details/137071374