病毒前置:文件系统相关的学习笔记

硬盘的物理结构

低级格式化

低级格式化的主要目的是将盘面划分成磁道、扇区和柱面

文件系统

基本INT 13H调用

  • BIOS INT 13H调用是BIOS提供的磁盘基本输入输出中断调用,它可以完成磁盘(包括硬盘和软盘)的复位、读写、校验、定位、诊断、格式化等功能,完全不用考虑被操作硬盘安装的是什么操作系统

  • 它使用的就是CHS寻址方式

  • 最大只能访问8GB左右的硬盘

Fat12

Fat12的格式

  • 引导扇区:记录磁盘和文件系统相关的各种参数,比如扇区大小,一簇的扇区数等(一个扇区大小)

  • Fat扇区:记录已分配的扇区和可用扇区,并通过链表依序记录一个文件的全部扇区(默认九个扇区大小

  • 根目录区(长度不固定):记录根目录文件项的表,文件项包括文件,目录。通过它可以查找到根目录下的文件和目录信息,比名称,大小,日期等

  • 数据区(长度不固定):用户数据(文件和子目录文件)存放的地方

  • *缺省有两个fat,1个fat9个扇区,引导扇区1个扇区,根目录区有224条记录(一个记录32字节),这些参数都都可以在引导扇区的引导记录中设定

Fat表的格式

Fat表开始3个字节没用于用户文件分配,3字节有2组12bits所以,占用了0,1两个簇号。用户的数据从簇2开始分配。

Fat表从头开始按3字节分成一组,一组中第2字节的低半字节作为最高半字节和一组中第1字节组成整数表示一个簇号,第2字节的高半字节作为最低半字节和第3字节组成整数表示一个簇号。

名称 偏移 长度 内容 软盘参考值
BS_jmpBoot 0 3 jmp LABEL_START nop
BS_OEMName 3 8 厂商名 ‘ForrestY’
BPB_BytsPerSec 11 2 每扇区字节数 0x200(即十进制512)
BPB_SecPerClus 13 1 扇区数 0x01
BPB_RsvdSecCnt 14 2 Boot记录占用多少扇区 0x01
BPB_NumFATs 16 1 共有多少FAT表 0x02
BPB_RootEntCnt 17 2 根目录文件数最大值(多少个32字节目录项) 0xE0 (224)
BPB_TotSec16 19 2 扇区总数 0xB40(2880)
BPB_Media 21 1 介质描述符 0xF0
BPB_FATSz16 22 2 每FAT扇区数 0x09
BPB_SecPerTrk 24 2 每磁道扇区数 0x12
BPB_NumHeads 26 2 磁头数 0x02
BPB_HiddSec 28 4 隐藏扇区数 0
BPB_TotSec32 32 4 如果BPB_TotSec16是0,由这个值记录扇区数 0xB40(2880)
BS_DrvNum 36 1 中断13的驱动器号 0
BS_Reserved1 37 1 未使用 0
BS_BootSig 38 1 扩展引导标记 0x29
BS_VolD 39 4 卷序列号 0
BS_VolLab 43 11 卷标 ‘OrangeS0.02’
BS_FileSysType 54 8 文件系统类型 ‘FAT12’
引导代码 62 448 引导代码、数据及其他填充字符等
结束标志 510 2 0xAA55
名称 偏移 长度 描述
DIR_Name 0 0xB 文件名8字节,扩展名3字节
DIR_Attr 0xB 1 文件属性
保留 0xC 10
DIR_WrtTime 0x16 2 最后修改时间
DIR_WrtDate 0x18 2 最后修改日期
DIR_FstClus 0x1A 2 此条目对应的开始簇号
DIR_FileSize 0x1C 4 文件大小