一个软盘映象文件分析示例
首先是 62 个字节的信息内容:
00000000: EB 58 90 ;jmp 58h nop 跳转到 0000005Ah (当前 02h + 58h) 然后一个空指令 00000003: XX XX XX XX XX XX XX XX ;OEM名称,8 个字符 0000000B: 00 02 ;200h = 512 扇区字节大小 0000000D: 01 ;每簇一个扇区 0000000E: 01 00 ;保留扇区只有零扇区 1 个 00000010: 02 ;默认有 2 个 FAT 表 00000011: E0 00 ;E0h = 224 根目录项目数 00000013: 40 0B ;B40h = 2880 扇区总数 00000015: F0 ;软盘类型 00000016: 09 00 ;FAT 占用扇区数 00000018: 12 00 ;12h = 18 磁道扇区数 0000001A: 02 00 ;磁头数 0000001C: 00 00 00 00 ;隐藏(坏)扇区数,新磁盘为0 00000020: 00 00 00 00 ;FAT32 使用 00000024: 00 ;MS-DOS 使用 00000025: 00 ;Windows NT 使用 00000026: 29 ;附加 BOOT 标志,29h 00000027: XX XX XX XX ;卷标序列号,双字 0000002B: XX XX XX XX XX XX XX XX XX XX XX ;卷标 11 字节,空格补零 00000036: 46 41 54 31 32 20 20 20 ;"FAT12 " 文件系统名称,空格补零 一点点缓冲字节(为与 FAT32 信息兼容而保留,可以不需要) 0000003E: 00 00 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000050: 00 00 00 00 00 00 00 00 00 00 开头处的 jump 跳到此处开始执行 0000005A: XX XX XX XX XX XX ... 000001F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 代码只能到这里,零扇区(512 字节 200h)最后两个字节为 BOOT 标志 000001FE: 55 AA ;BOOT 标志 下面是第一个 FAT 表 00000200: F0 FF FF FF 0F 00 00 00 00 00 00 00 00 00 00 00 ... 000013F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 该 FAT 表大小为 1400h - 0200h = 1200h = 4608 对于 FAT12 每个项目 1.5 字节就是 4608 / 1.5 = 3072 项 需要注意的是 FAT 表第一个字节存放的是媒体信息,即软盘类型 与 0000:0015h 中存放的内容一样(F0h)。 为了保持 FAT12 表的一直性,附加了两个 FFh 字节。 那么,文件数据是用第三个簇 02h 开始。 内容为:FFFh-000h-...-000h 文件数据在第三个簇(02h)为 FFFh 没有后续簇。 从第四个簇开始均为 000h 表示空簇,未使用。 00001400: F0 FF FF FF 0F 00 00 00 00 00 00 00 00 00 00 00 ... 000025F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 这是备份 FAT 表,与上一个完全一样。 大小 2600h - 1400h = 1200h = 4608 下面是 ROOT 根目录项目,每个 32 字节 00002600: 54 45 53 54 20 20 20 20 54 58 54 ;"TEST TXT" 文件名,8.3 格式 0000260B: 00 ;文件属性 0000260C: 10 ;NT 保留 10? 0000260D: 07 ;文件创建毫秒 7 * 5 = 35 0000260E: D4 9E ;创建时间 9ED4h -> 1001 1110 1101 0100 -> 10011 110110 10100 -> 19:54:40(20*2) 00002610: 51 32 ;创建日期 3251h -> 0011 0010 0101 0001 -> 0011001 0010 10001 -> 2005(25+1980)/2/17 00002612: 00 00 ;最后访问时间 00002614: 00 00 ;第一个簇的高地址 00002616: DC 9E ;最后修改时间 9EDCh -> 1001 1110 1101 1100 -> 10011 110110 11100 -> 19:54:56 00002618: 51 32 ;最后修改日期 3251h -> 0011 0010 0101 0001 -> 0011001 0010 10001 -> 2005(25+1980)/2/17 0000261A: 02 00 ;第一个簇的低地址,即簇地址为 0000:0002h FAT 表显示无后续簇(FFFh) 0000261C: 0F 00 00 00 ;文件大小 0Fh = 15 字节 一个目录项完毕,下一个目录项 DirName[0] 为 00 表示是空项目 并且在其之前也没有其他的有内容的项目 00002620: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... 000041F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 根目录项目共 4200h - 2600h = 1C00h = 7168 字节 = 224 * 32 下面是文件数据区,与 FAT 表对应,注意这是第三个簇(02h) 00004200: 54 68 69 73 20 69 73 20 61 20 74 65 73 74 2E 00 This is a test. 00004210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... 000043F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 第四个簇(03h)开始 00004400: F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 ... 00167FF0: F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 文件数据区大小为 168000h - 4200h = 163E00h = 1457664 = 2847 * 512 磁盘总计大小为 168000h = 1474560 = 2880 * 512 = 1.44M
发表评论