解析FAT16文件系统

2023-05-16

引导扇区的信息例如以下:



点击看大图 


1.  偏移地址00H,长度3,内容:EB 3C 90 跳转指令。


2.  偏移地址03H,长度8。内容:4D 53 44 4F 53 35 2E 30 为厂商标志和os 版本号号,这里是MSDOS5.0。


3.  偏移地址0BH,长度2,内容:00 02。

注意这里数据的布局,高地址放高字节,低地址放低字节(数据为小端格式组织),所以数据应该是0200,即512。表示的意思是,该磁盘每一个扇区有512个字节。有的可能是1024、2048、4096。


4.  偏移地址0DH,长度1。内容:01。

表示的意思是每一个簇有1个扇区。

这个值不能为0,并且必须是2的整数次方,比方1、2、4、8、16、32、64、128。可是这个值不能使每一个簇超过32KB字节。


5.  偏移地址0EH,长度2,内容:08 00。转换一下。就是00 08,意思是保留区域中的保留扇区数为8个。

那么就能够知道以下的FAT1区的開始的地址就是:0x08*0x200(每一个扇区的字节数)=0x1000。


6.  偏移地址10H。长度1,内容:02。表示此卷中的FAT结构的份数为2,另外一个是备份的。


7.  偏移地址11H。长度2,内容:00 02。转换一下,就是0200H,表示根文件夹项数(Root Entries) 能够保存在该分区的根文件夹文件夹中的32个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为512。


8.  偏移量地址13H。长度2,内容:4D ED。转换一下就是ED4DH。即大约32MB的SD卡存储量。表示小扇区数(Small Sector) 。该分区上的扇区数,表示为16位(<65536)。对大于65536个扇区的分区来说,本字段的值为0,而使用大扇区数来代替它。


9.  偏移地址16H,长度2,内容:EC 00。转换一下为00EC,表示每一个FAT占用的扇区数。

那么每一个扇区占用的字节数就是0x00EC*0x200=0x1D800。依据启动区、FAT1、FAT2、根文件夹、数据区的次序,能够依次计算出它们的地址了。

(教程中给出的偏移地址为24H,可是依据实际的FAT1/FAT2地址的推算。应该是16H地址)


10. 偏移量地址20H,长度2,内容:00 00。

表示大扇区数(Large Sector) 。假设小扇区数字段的值为0,本字段就包括该FAT16分区中的总扇区数。假设小扇区数字段的值不为0,那么本字段的值为0。


11. 偏移量地址36H,长度为8,内容:46 41 54 31 36 20 20 20。对于ASCII码为“FAT16”,表示文件系统类型(File System Type) 依据该磁盘格式,该字段的值能够为FAT、FAT12或FAT16


启动区:理所当然是0x00;


FAT1:0x1000;


FAT2:0x1000 + 0x1D800 = 0x1E800;


根文件夹区:0x1E800 + 0x1D800 = 0x3C000;


数据区的地址,等等再计算。

这个仅仅是计算。能够看看是不是和实际的一致。

 

点击看大图


 


点击看大图


 


点击看大图 



怎么样。是不是和计算的非常一致。


为什么要计算SD数据的读取要给出地址。并且每次读取都是一个整扇区。512个字节。

找出这些地址后,能够非常方便的找到数据。


 如今分析下根文件夹区的内容:

点击看大图


 

这里使用的是FAT16短文件文件夹项,每32个字节表示一个文件(文件夹也是),32个字节的表示定义分别例如以下:





FAT16文件夹项32个字节的表示定义


字节偏移(16进制)


字节数


定义


0x0~0x7


8


文件名称


0x8~0xA


3


扩展名


0xB


1


属性字节


00000000(读写)


00000001(仅仅读)


00000010(隐藏)


00000100(系统)


00001000(卷标)


  00010000(子文件夹)


00100000(归档)


0xC~0x15


10


系统保留


0x16~0x17


2


文件的近期改动时间


0x18~0x19


2


文件的近期改动日期


0x1A~0x1B


2


表示文件的首簇号


0x1C~0x1F


4


表示文件的长度


 


1.  偏移地址00H。长度8,内容:驱动器的名称,8个字节。

这里的CCD8相应国标码“特”。而C8A8相应国标码“权”。即特权同学给该SD卡起的“特权”一名。


2.  偏移地址20H,长度8。内容:54 45 53 54 20 20 20 20。

表示第一个文件名称:TEST (空缺部分是空格)。


偏移地址80H,长度8。内容:4E 45 58 54 20 20 20 20。表示第二个文件名称:NEXT (空缺部分是空格)。


3.  偏移地址28H(88H也一样),长度3,内容:54 58 54。

表示文件类型,为ASCII字符表示。


4.  偏移地址2BH(8BH也一样),长度1,内容:20。表示文件属性,00000000(读写);00000001(仅仅读);00000010(隐藏)。00000100(系统)。00001000(卷标);00010000(子文件夹);00100000(归档)。


5.  偏移地址36H,长度2,内容为BA 49。表示时间=小时*2048+分钟*32+秒/2。得出的结果换算成16进制填入就可以。也就是:36H字节的0~4位是以2秒为单位的量值;36H字节的5~7位和37H字节的0~2位是分钟;37H字节的3~7位是小时。


6.  偏移地址38H,长度2,内容为A3 3A。表示日期=(年份-1980)*512+月份*32+日。得出的结果换算成16进制填入就可以。也就是:38H字节0~4位是日期数。38H字节5~7位和39H字节0位是月份;39H字节的1~7位为年号。原定义中0~119分别代表1980~2099,眼下高版本号的Windows同意取0~127,即年号最大能够到2107年。


7.  偏移地址3AH,长度2。为该文件開始簇号,这里也是用了小端格式组织。转换下为00 02,依据这个就能够找到文件TEST.txt下一个簇号在FAT1中的位置了。1000H+02H*02H(由于2个字节存一个簇号)= 1004H。


偏移地址3AH。长度2,为该文件開始簇号,这里也是用了小端格式组织。

转换下为00 62。依据这个就能够找到文件NEXT.txt下一个簇号在FAT1中的位置了。1000H+62H*02H(由于2个字节存一个簇号)= 10C4H。


8.  偏移地址3CH,长度4,内容:59 BE 00 00。

表示文件长度,转换后为00 00 BE 59就是48729字节。


偏移地址9CH,长度4,内容:32 00 00 00。

表示文件长度。转换后为00 00 00 32就是50字节。


 点击看大图 


TEST.txt占用了48KB的空间,NEXT占用了512B的空间。文件是依照整簇来存放的。不够一个簇的大小(由上面算得。一个簇为一个扇区即512B),也要给一个簇的空间。


 计算出该文件放置空间。


从文件的大小能够计算出,须要占用多少个簇。依据前面的数据,每一个簇放1个扇区,每一个扇区512个字节,那么一个簇的空间就是512字节了。那么48729字节须要96个簇。这96个簇的開始的地址就能够计算出来了。


点击看大图


 


    首先要提一点。这个地方也是特权同学找了非常多资料才发现的,就是根文件夹中根文件夹占有32(20H)个扇区应该是固定的(至少对于FAT16应该是这样),所以真正的用户数据存放应该是从根文件夹地址的32个扇区偏移量后開始算的。


上面已经知道TEST.txt開始簇地址存放在FAT1中的偏移量了:02H,由此能够先计算出TEST.txt的第一簇数据存放地址为:3C000H(根文件夹地址)+20H*200H(前面提到的用户数据偏移量)+(02H-02H)*01H(1个簇有1个扇区)*200H=40000H。把偏移量-02H意思是簇号在FAT1中存储都是从02H開始的。


而第一个簇地址存放在FAT1中的:1000H(FAT1起始地址)+02H*02H=1004H。而1004H地址上的数据为:03 00。转换后为0003H,那么我们能够计算出TEST.txt第二个簇的地址为:3C000H(根文件夹区地址)+20H*200H(前面提到的用户数据偏移量)+ (03H-02H)*01H(1个簇有1个扇区)*200H=40200(第一个簇開始地址)。依此类推,一直到FAT1中偏移量为C2处出现了FF FF。这表示TEST.txt文件存储结束,那么前面的0061H就是文件最后一个簇偏移量。我们能够由此算一下文件大小为:(0061H-0002H+0001H(补偿))=96个簇。和实际相符。


    相同的道理能够算出NEXT.txt文件的存放地址。首先起首地址偏移量为62H,由此能够先计算出NEXT.txt的第一簇数据存放地址为:3C000H(根文件夹地址)+20H*200H(前面提到的用户数据偏移量)+(62H-02H)*01H(1个簇有1个扇区)*200H=4C000H。而第一个簇地址存放在FAT1中的:1000H(FAT1起始地址)+62H*02H=10C4H。

而10C4H地址上的数据为:FF FF,即结束了。也就是说由于NTXT.txt不满一个簇,那么仅仅能分配到一个簇的地址空间。


 



点击看大图


 


 点击看大图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析FAT16文件系统 的相关文章

  • Linux文件系统--文件类型

    Linux中一切都是文件 xff0c 文件类型有多种 xff0c 使用ls l命令可以查看文件属性 xff0c 所显示结果的第一列的第一个字符用来表示文件类型 xff0c 如下 xff1a 1 普通文件 第一列第一个字符为 的文件为普通文件
  • 文件系统XFS和EXT4的区别

    XFS和EXT4都是Linux系统中的文件系统 下面是它们之间的一些主要区别 xff1a 文件系统大小限制 xff1a EXT4最大支持16TB的文件系统和1EB的文件大小 而XFS最大支持8EB的文件系统和8EB的文件大小 文件系统碎片
  • 解析FAT16文件系统

    引导扇区的信息例如以下 xff1a 1 偏移地址00H xff0c 长度3 xff0c 内容 xff1a EB 3C 90 跳转指令 2 偏移地址03H xff0c 长度8 内容 xff1a 4D 53 44 4F 53 35 2E 30
  • nuttx和linux区别,Nuttx文件系统

    1 介绍 文件系统 xff0c 是对一个存储设备上的数据和元数据进行组织的机制 xff0c 它是操作系统管理持久性数据的子系统 xff0c 提供数据存储和访问功能 将一个文件系统与一个存储设备关联起来的过程叫做挂载 mount xff0c
  • Linux文件系统(三)文档压缩及解压缩

    1 文档压缩概述 2 图形化归档工具 3 命令行工具
  • Linux文件系统(四)文件系统管理命令

    1 文件系统的基本操作 2 目录的基本操作 3 查看文件内容 4 文件类型 5 查询文件 6 其他管理命令
  • ROS学习:ROS文件系统--package.xml

    package xml 也是一个 catkin的package 必备文件 xff0c 它是这个软件包的描述文件 xff0c 在较早的ROS 版本 rosbuild 编译系统 中 xff0c 这个文件叫做 manifest xml xff0c
  • linux文件系统出错:Read-only file system

    问题 root xx opt gopath src github com hyperledger fabric mkdir p testtt mkdir cannot create directory testtt Read only fi
  • 嵌入式开发中常用文件系统介绍( cramfs、 JFFS2、 NFS、 initrd、 yaffs2、 ext4以及squashfs)

    1 存储介质的分类 1 是否需要初始化分为Nand flass和Nor flash Nor flash不需要初始化就可以工作 可以在Nor flash上运行代码从而节省内存 但是写入和擦除速度慢 且单位容量成本高 适用于小型穿戴设备 Nan
  • 六、操作系统之文件管理

    六 文件管理 文件系统的概念 文件系统时OS与用户关系最紧密的一部分 对用户来说 它是OS中最直观的部分 能否方便使用OS 以及OS的可信赖程度往往取决于文件系统的功能和性能 1 文件和文件系统 2 文件系统的功能 3
  • Ext4文件系统介绍 - 理论篇

    Overview ext4文件系统分割成多个block groups 为了解决碎片化问题 block allocator尽量将一个文件的block放在一个group中 block groups的size通过sb s blocks per g
  • 用busybox构建最小根文件系统详解

    1 busybox源码获取 1 busybox官网下载地址 https busybox net 2 建议下载busybox的版本 尽量和你使用的编译环境 比如 Ubuntu 的版本相近 版本差太多可能需要解决一些编译时候的兼容问题 2 bu
  • ext4 delay allocation之ext4_writepages页回写源码剖析

    概述 ext4 write写入pagecache之后 再合适的时机会回写到磁盘 ext4文件系统中是通过ext4 writepages写入磁盘 本来将在源码角度分析该过程 建议先参照ext4 delay allocation数据结构 ngi
  • FAT16 FAT32 文件系统

    FAT 英文为File Allocation Table 文档分配表 先要记住几个概念 扇区 一般扇区为512个字节 簇 由若干个扇区组成 而FAT文件系统 其他文件系统应该相似 就是专门管理这些簇的 一个文件可能占据一个或者多个簇 按正确
  • 简简单单吃个磁盘(硬盘?)

    前言 Version S Description Date By V1 C First Version 2020 10 24 AYZP C Create A Add M Modify D Delete 整理资料的时候 发现个磁盘的相关知识不
  • 一文让你彻底了解Linux内核文件系统

    一 文件系统特点 文件系统要有严格的组织形式 使得文件能够以块为单位进行存储 文件系统中也要有索引区 用来方便查找一个文件分成的多个块都存放在了什么位置 如果文件系统中有的文件是热点文件 近期经常被读取和写入 文件系统应该有缓存层 文件应该
  • CMD 命令行实现 Windows 下复制文件到文件夹下的所有文件夹

    目录 前言 1 学习 xcopy 2 展示命令行 前言 提示 这里可以添加本文要记录的大概内容 整件事情真是花了我大半天的时间 几个小时啊 终于从错误中尝试出了正确的做法 赶紧分享一下 1 学习 xcopy Win R 调出运行 键入 cm
  • buffer_head数据结构

    内核版本 5 9 0 数据结构 Historically a buffer head was used to map a single block within a page and of course as the unit of I O
  • ext4 buddy块分配算法源码剖析

    概述 ext4 buddy块分配算法的函数是ext4 mb regular allocator 阅读本文之前需要先看下ext4 mballoc之buddy算法 nginux的博客 CSDN博客 ext4 mb regular allocat
  • 用WinHex软件解析FAT32文件系统

    一 工欲善其事 1 准备工作 将一个U盘格式化为FAT32格式 在U盘内创建几个文件 最好是TXT文档 其中至少有一个是长文件 命名较长 2 补充知识 短文件名表示 长文件名表示 Note 当一个文件名为长文件名时 会由几个长文件名表示法和

随机推荐

  • 对本课程的期望

    希望自己能够通过对本课程的学习 xff0c 对C语言能有进一步的了解 xff0c 能够学会自主运用 xff0c 学习到经验技术和知识 xff0c 也希望老师能够在学习新知识时多讲解多运用 xff0c 反复练习 xff0c 以增加学生对新知识
  • 一篇文章带你搞懂JS对象的自我销毁

    在日常的JS组件开发中 xff0c 往往会有一些较为复杂的DOM操作及事件监听 xff0c 尤其是在处理UI层面的widgets时候更为明显 常常会花很多精力在对象的init上 xff0c 而当组件需要被移除时则仅仅是把所在DOM草草的re
  • LCA系列 hdu2587

    题http acm hdu edu cn showproblem php pid 61 2586 好久不写LCA了 span class hljs preprocessor include lt cstdio gt span span cl
  • AutoLISPDCL对话框设计

    AutoLISPDCL对话框设计 xff0c 代码如下 defun c viewdcl if null dcl pt setq dcl pt 39 1 1 setq dcl file getfiled 34 打开DCL文件 34 34 34
  • boost的asio接收单路大数据量udp包的方法

    开发windows客户端接收RTP视频流 xff0c 当h264视频达到1080P 60fps的时候 xff0c 按包来调用recvfrom的函数压力比较大 xff0c 存在丢包的问题 xff0c windows的完成端口的性能效果当然可以
  • Python Word2Vec使用训练好的模型生成词向量

    文本文件必须是utf 8无bom格式 from gensim models deprecated word2vec import Word2Vec model 61 Word2Vec load 39 model Word60 model 3
  • 使用dig或nslookup指定dns服务器查询域名解析

    一般来说linux下查询域名解析有两种选择 xff0c nslookup或者dig xff0c 而在使用上我觉得dig更加方便顺手 如果是在linux下的话 xff0c 只要装上dnsutils这个包就可以使用dig命令 安装bind ut
  • freeswitch系列六 freeswitch在拨号计划中通过lua实现对redis操作

    3种freeswitch访问redis方案的分析 由于项目的原因 xff0c 需要在freeswitch的拨号计划中根据redis中特定key的值 xff0c 判断后续的操作是转发请求或者播放录音 这里需要freeswitch中实现对red
  • 接口异常状态统一处理方案在 Firefox 下无效的原因和解决方案

    没想到会是在双十一这么忙的时间段把这篇文章写完 xff0c 公司很忙很紧张 xff0c 可我还有时间在公司做分享 xff0c 写博文 xff0c 惭愧惭愧 做后台系统在双十一期间不如 2c 端的小伙伴有参与感呀 问题根源 上文 接口异常状态
  • 玩转神龙服务器的Hyper-V虚拟化网络之 配置直通网卡

    在上一篇 玩转神龙服务器的Hyper V虚拟化网络之 配置NAT网络 的文章中我们使用NAT的方式使Hyper V VM可以访问公网 在这一篇里 xff0c 我们会使用直通网卡的特性来使VM有对外提供服务的功能 前置条件 神龙服务器 xff
  • postgresql学习笔记1---安装和psql基本操作

    本文是PostgreSQL修炼之道这本书的学习笔记 xff0c 记录下疑惑或不解的地方 xff0e 这里也列一些资源 官方文档 http www postgresql org files documentation pdf 9 4 post
  • python 在字典中添加键值对的方法。

    list 添加元素的方法是 list append xff08 a xff09 将 a 添加到 list 里 dict 添加元素的方法是 dict update dict2 意为 xff0c 将 dict2 的内容添加到 dict 中 转载
  • 常用的4种开发模式

    常用的4种开发模式 1 瀑布式开发 瀑布式开发是由W W Royce在1970年提出的软件开发模型 xff0c 是一种比较老的计算机软件开发模式 xff0c 也是典型的预见性的开发模式 在瀑布式开发模式中 xff0c 开发严格遵循预先计划的
  • 骚猪队的模板

    SaoZhu Team Code Library 2017 11 TAGS ACM for newest edition click here East China Normal University Chen WeiWen Softwar
  • 用nodejs库cheerio抓取网页内容与图片

    之前都是PHP phpQuery 抓取 xff0c 但jQuery更强大 xff0c 于是用nodejs 只是node jquery的依赖太多 xff0c 只好用cheerio 下面是一个抓取脚本 xff1a var http 61 req
  • 完整的系统帮助类Utils

    来源 xff1a http www cnblogs com yuangang p 5477324 html using System using System Collections Generic using System Linq us
  • 转载--git教程

    http lazynight me 2898 html 转载于 https www cnblogs com benchan2015 p 4897797 html
  • 网络通信第一课 C++封装HTTP请求报文说明

    一个HTTP请求报文由请求行 xff08 request line xff09 请求头部 xff08 header xff09 空行和请求数据4个部分组成 使用C 43 43 组装上述报文 boost asio streambuf requ
  • [重要新功能]删除自己发表的评论

    当你登录后 使用cookie也可以 发表评论 不管是使用普通评论还是高级评论 xff0c 你就可以在其他人的Blog中删除自己发表过的评论 这样你在发表评论时 xff0c 如果写错了内容 可以删除后重发 接着 xff0c 准备增加在管理页面
  • 解析FAT16文件系统

    引导扇区的信息例如以下 xff1a 1 偏移地址00H xff0c 长度3 xff0c 内容 xff1a EB 3C 90 跳转指令 2 偏移地址03H xff0c 长度8 内容 xff1a 4D 53 44 4F 53 35 2E 30