一. 用winhex工具分析SD卡(FAT32)

WinHex.exe  ->  工具  -> 打开磁盘 -> 选中SD卡设备

图(1)

打开后主界面如下:

图(2)

二. FAT32磁盘格式分析

当磁盘有多个分区时:

fat32磁盘是由 MBR + 分区1(保留区 + 文件分配表 + 数据区)+ 分区2 + ......

其实,当我们在电脑上面,看到的U盘/SD卡设备,就是如上图红色选择部分,是不包括MBR部分的

图(3)

0x00000000 - 0x0013B000     保留区(DBR + FSINFO + ...)

0x0013B000 - 0x0089D800      FAT1

0x0089D800 - 0x01000000      FAT2

0x01000000 -                          数据区

图(4)

三. 分析二进制数据(DBR FSINFO FAT1 FAT2 数据)

(1)启动扇区(DBR)

图(5)

0xEB 0x58 0x90:                                               跳转指令

0x54 0x48 0x52 0x45 0x45 0x53 0x20 0x20:   文件系统标志和版本号 MSDOS5.0

0x00 0x20:                                                     0x200 (512)每个扇区512字节

0x08:                                                              最小单元(簇)为0x08(8)扇区,8*512=4K

0xD8 0x09:                                                     0x9D8(2520) 保留扇区2520个  2520*512=1.2M

0x02 :        2个FAT表(FAT1 FAT2)

0xF8 :         存储介质类型,F8标准值

0x46 0xCC 0xEC 0x00:文件系统总的扇区数:15518790    15518790*512=7.39G

0x14 0x3B 0x00 0x00:每个fat表占用的扇区总数:15124    15124*512 =  7.4M

0x02 0x00 0x00 0x00:  根目录所在第一个簇的簇号,通常情况下,根目录簇号为2

0x46 0x41 0x54 0x33 0x32 0x20 0x20 0x20:文件系统格式 FAT32

(2)信息扇区(FSINFO)

图(6)

0x52 0x52 0x61 0x41: 扩展引导标志

0x72 0x72 0x41 0x61: FSINFO签名

0x84 0x89 0x1D 0x00: 剩余所有的簇总数  0x1D8984 * 4k = 7928823808 byte = 7.38G

0x06 0x00:                     下一个可用簇:6

0x55 0xAA:                  结束标记字符

(3)文件分配表(FAT1)

在分析FAT表之前,我们先理解一下FAT32文件系统的一些基本信息:

扇区: 512 字节

: 文件系统的最小单元, 多个连续的扇区组成, 本SD卡为 4K(8个扇区,必须为2的整数次幂), 最大支持32K(64个扇区), 当我们保存一个1K的文件时,实际上,在文件系统中,是占用的是4K的空间大小,因为最小的存储单元是4K, 当我们保存一个10K的文件时,那么它需要占用三个簇,实际占用空间大小为12K。

FAT : File Allocation Table, 文件分配表, 当我们存储10K的文件时,需要使用三个簇,但是一定连续的三个簇吗? 并非一定是连续的,那么如何知道是使用了哪三个族呢,就需要我们文件分配表来记录了,第一个簇的地址,下一个簇是哪个,哪个是最后的结束簇。

FAT 是一组与数据簇号对应的列表, 所有簇从2开始进行编号,每个簇都有一个自己的地址编号,根目录默认簇号是为2

FAT32中每个簇的簇地址是有32bit(4个字节),FAT表中的所有字节位置以4字节为单位进行划分,并对所有划分后的位置由0进行地址编号。0号地址与1号地址被系统保留并存储特殊标志内容。从2号地址开始,每个地址对应于数据区的簇号,FAT表中的地址编号与数据区中的簇号相同。我们称FAT表中的这些地址为FAT表项,FAT表项中记录的值称为FAT表项值。(没理解的请反复多读几遍,至关重要)

当文件系统被创建,也就是进行格式化操作时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。由于创建文件系统的同时也会创建根目录,也就是为根目录分配了一个簇空间,通常为2号簇,与之对应的2号FAT表项记录为2号簇,被写入一个结束标记。

几点说明:

(1) 由于簇号起始于2号,所以FAT表项的0号表项与1号表项不与任何簇对应。FAT32的0号表项值总是“F8FFFF0F”。

(2)1号表项可能被用于记录脏标志,以说明文件系统没有被正常卸载或者磁盘表面存在错误。不过这个值并不重要。正常情况下1号表项的值为“FFFFFFFF”或“FFFFFF0F”。

(3)如果某个簇未被分配使用,它对应的FAT表项内容为0;

(4)当某个簇已被分配使用,则它对应的FAT表项内的FAT表项值也就是该文件的下一个存储位置的簇号。如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记,对于FAT32而言,代表文件结束的FAT表项值为0x0FFFFFFF

(5)如果某个簇存在坏扇区,则整个簇会用0xFFFFFF7标记为坏簇,这个坏簇标记就记录在它所对应的FAT表项中。

(6)在文件系统中新建文件时,如果新建的文件只占用一个簇,为其分配的簇对应的FAT表项将会写入结束标记。如果新建的文件不只占用一个簇,则在其所占用的每个簇对应的FAT表项中写入为其分配的下一簇的簇号,在最后一个簇对应的FAT表象中写入结束标记。

(7)新建目录时,只为其分配一个簇的空间,对应的FAT表项中写入结束标记。当目录增大超出一个簇的大小时,将会在空闲空间中继续为其分配一个簇,并在FAT表中为其建立FAT表链以描述它所占用的簇情况。

图(7)

【0号表项】:0x0FFFFFF8;  FAT表起始固定标识

【1号表项】:0xFFFFFFFF;  默认值

【2号表项】:0x0FFFFFFF;  根目录 Root directory 所在簇,开始扇区32768

【3号表项】:0x0FFFFFFF;  目录 System Volume Information 所在簇,开始扇区32776 (32768+8)

【4号表项】:0x0FFFFFFF;  文件 WPSettings.dat 所在簇,开始扇区32784 (32776+8)

【5号表项】:0x0FFFFFFF;  文件 IndexerVolumeGuid 所在簇,开始扇区32792 (32784+8)

由于我们是把SD卡格式化后分析,所以fat32除了根目录外,无其他我们存储文件,我们拷贝一个build.log文件再分析。build.log的大小为10k, 需要占用三个簇。

图(8)

图(9)

【6号表项】:0x07  表项值为7,即指向下一个表项, 2号簇为根目录,对应的开始扇区为32768, 6号簇。开始的扇区为 32768 + 8 * (6-2)= 32800, 即为build.log的开始扇区。

【7号表项】:0x08  表项值为8,即指向下一个表项。

【8号表项】: 0x0FFFFFFF, 结束簇, 从6号簇build.log开始,到8号簇,文件结束。

到此,build.log的文件如何存储的,我们弄明白了,整个build.log保存在 6号簇-8号簇, 三个族存储了build.log内的数据,但是build.log的文件名/文件属性/最后修改时间/最后保存时间 这些信息保存在哪里呢?

由于build.log是存放在根目录下的,那我们来看下根目录的二进制数据:

图(10)

在查看根目录的二进制数据之前,我们还是先普及下基本信息:

(1)目录所在的扇区,都是以32 Bytes划分为一个单位,每个单位称为一个目录项。

(2)根据文件名及后缀,我们可以分为短目录文件,长目录文件,简单点理解,如果文件名>8 byte 或者后缀名>3, 则为长文件目录,否则为短文件目录

我们查看build.log(短文件目录)

图(11)

图(12)

文件名: build

后缀名: log

属性:     0x20 (0010 0000) 读写 归档

簇号:     0x06开始簇号

大小:     0x2800  10K

至此,build.log的 文件名称以及相关的属性信息,以及build.log文件的内容存储,都已经明白。

如果是长文件目录

图(13)

不再对具体的长文件目录进行分析。

(4)文件分配表(FAT2)

FAT2与FAT1完全相同

(5)数据区

参考资料:

https://blog.csdn.net/mjx91282041/article/details/8904705/

https://blog.csdn.net/u010650845/article/details/60780979

https://blog.csdn.net/eternally123/article/details/79836210

FAT32文件系统格式详解(图文针对具体文件存储,分析fat32 SD卡)相关推荐

  1. html播放mov格式视频,jQuery及video标签视频播放弹窗插件支持mp4,mov等格式详解(图文)...

    在做html5做播放视频时,如果是mp4,ogg,webm等视频格式,用h5自带的video标签就可以实现,但苹果的mov格式视频video标签是不支持的. h5实现mp4视频播放:video标签仅支 ...

  2. 文件系统的详解与常见文件系统模式比较

    目录 1. 文件系统的详解 2. 常见的文件系统比较 2.1 Windows下的文件系统 2.1.1 FAT16文件系统 2.1.2 FAT32文件系统 2.1.3 FAT64文件系统(exFAT文件 ...

  3. BMP格式详解<转>

    BMP格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Win ...

  4. bmp图片的格式详解

    BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广 ...

  5. Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解

    http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...

  6. [转]纯真IP数据库格式详解

    纯真IP数据库格式详解 摘要 网络上的IP数据库以纯真版的最为流行,LumaQQ也采用了纯真版IP数据库做为IP查询功能的基础.不过关于其格式的文档却非常之少,后来终于在网上找到了一份文档,得以了解其 ...

  7. TCP数据包协议格式详解

    出一个专栏把通信协议搞一下吧,万物互联的根本呀. IP 版本4位:4(二进制0100)表示IPv4,6(二进制0110)表示IPv6 报头长度(单位4byte):因为选项长度不确定,取值范围是5-15 ...

  8. BMP位图格式详解二--转载

    转自:http://www.cnblogs.com/xiehy/archive/2011/06/07/2074405.html BMP文件格式,又称为Bitmap(位图)或是DIB(Device-In ...

  9. BMP位图格式详解二

    BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式.由于它可以不作任何变换地保存图像 ...

  10. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

最新文章

  1. 划重点!2020年,这些前沿技术最受关注
  2. string类型比较_redis存json数据时选择string还是hash
  3. android studio 如何导入工程文件,Android studio如何导入已有的eclipse工程
  4. linux6无法启动iscsi服务,RHEL6下安装配置ISCSI服务器
  5. 支持向量机(SVM)复习总结
  6. Docker学习2-虚拟化
  7. iPhone11用第三方的快充,电池健康度会下降很快吗?
  8. C# Winform 运行异常 CefSharp.core.dll 找不到指定的模块
  9. golang 使用 consul 做服务发现
  10. 数据结构笔记(十三)-- 串的堆分配存储表示
  11. 通过set赋值,与select赋值的区别
  12. html5整个桌面背景图片,HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验...
  13. 阿里矢量图标及其引入方式
  14. 为招商手机银行点个赞!
  15. 如何安全快速的迁移你的系统到固态硬盘
  16. UDP与TCP协议详解
  17. FFMPEG源码编译(Windows篇)
  18. HTML中利用JS调用PHP (以登录为例)
  19. excel快速删除空行
  20. JavaScript实现 数字转换为万 千万 百万

热门文章

  1. 网课答案免费搜题入口
  2. dtim 间隔(Delivery Traffic Indication Message)
  3. fisheye calib视野调整
  4. 加权平均数的例子_加权平均值和算术平均值的区别与公式
  5. 摄像头设计工程师面试技巧_系统设计面试准备的5个技巧
  6. 本科生学习的一些心得
  7. 宿华辞任快手CEO、程一笑接任;百世将国内快递业务68亿元出售给极兔|美通社头条...
  8. 图纸打印什么时候用蓝图_为什么工程图纸都是蓝色的?是叫“蓝图”吗?
  9. html 二维表_Qrcode 二维码 API 接入方法,任何内容都可以生成二维码
  10. Legend of Mir(传奇)官方源码学习3、服务端程序初始化过程