日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FAT16和FAT32文件定位

發布時間:2024/3/26 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FAT16和FAT32文件定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • FAT16

FAT文件系統的數據結構中有兩個重要的結構:文件分配表和目錄項。

FAT16整體結構由DBR扇區、FAT表、根目錄和數據區組成。下面將詳細介紹。

  • DBR扇區結構
  • 其也稱為引導扇區,由跳轉指令JUMP,OEM廠商標志,BPB和擴展BPB,引導代碼,結束標志0XAA55構成。下圖為winhex下的DBR扇區截圖。其具體內容設計可查看FATwiki:https://zh.wikipedia.org/wiki/FAT#%E8%AE%BE%E8%AE%A1。其中,可以看到保留扇區為0x08,FAT表為兩個,每簇扇區數為0x80(0x0d),每個FAT占位0x80扇區(0x16-0x17)。

  • FAT表(文件分配表)
  • 緊跟在保留分區后面的是FAT區,其由兩個完全相同的FAT(File Allocation Table,文件分配表)表單組成,FAT文件系統的名字也是因此而來。FAT 表是一組與數據簇號對應的列表。FAT2緊跟在FAT1之后,它的位置可以通過FAT1的位置加上FAT表的扇區數計算出來。(有時也只有一個FAT,具體多少要看DBR中偏移量為0x10處的值)

    它是映射到分區每個簇的條目列表。每個條目記錄下面五種信息中的一種。

    • 鏈中下一個簇的地址
    • 一個特殊的簇鏈結束符(EOC,End Of Cluster-chain,或稱End Of Chain)符號指示鏈的結束
    • 一個特殊的符號標示壞簇
    • 一個特殊的符號標示保留簇
    • 0來表示空閑簇

    定位:0x8*512 = 0x1000

  • 根目錄
  • 是一個表示目錄的特殊類型文件(現今通常稱為文件夾)。它里面保存的每個文件或目錄使用表中的32字節條目表示。每個條目記錄名字、擴展名、屬性(檔案、目錄、隱藏、只讀、系統和卷)、創建的日期和時間、文件/目錄數據第一個簇的地址,最后是文件/目錄的大小。FAT16的根目錄并不由簇進行管理。FAT16固定為32個扇區。

    定位:0x1000 + 0x80*512*2 = 0x21000

  • 數據區
  • 115.gif定位:0x21000 + 32*512 + (5-2)*128*512 = 0x55000

    • FAT32

    FAT32與FAT16類似,它主要是由保留區(DBR,FSINFO信息扇區,其余),文件分配表,數據區(根目錄,數據)。整體上看,其區別主要在于保留區,數據區中的根目錄由簇進行管理。

  • DBR
  • 具體設計還是參照wiki: https://zh.wikipedia.org/wiki/FAT#%E8%AE%BE%E8%AE%A1

    下面圖片是我的磁盤上的DBR信息,可以看到FAT表(0x10)為兩個,保留扇區數(0x0e-0x0f)為0x2022=8226。

    每個FAT表大小為(0x24-0x27)0x0FEF = 4079扇區。每簇扇區數為0x8(0x0d)。

    ?

  • FSINFO扇區
  • FAT32在保留區中增加了一個FSINFO扇區,用以記錄文件系統中空閑簇的數量以及下一可用簇的簇號等信息,以供操作系統作為參考。

  • FAT
  • 根據DBR中信息:FAT表位置應該是8226*512 = 0x404400。

  • 根目錄
  • 0x404400+0xFEF*0x200*2 = 0x800000

    可以看到a.txt的目錄項從0x8000e0開始,總共32個字節,位于8號簇。由DBR信息可知,每個簇占8個扇區(DBR信息),那么可以定位a.txt的位置為0x806000 = 0x80000 + 6 * 8 * 512。

  • 文件信息(a.txt)
    • FAT16文件定位與FAT32文件定位區別
  • 在DBR中表示FAT表的大小偏移量不同。FAT16: 0x16-0x17? FAT32:0x24-0x27
  • 文件目錄項大小不同,FAT16固定為32個扇區,而FAT32對目錄項以簇為單位進行表示。
  • (短文件)文件目錄項中表示文件所在簇號位置偏移量不同。FAT16:0x1a-0x1b FAT32:0x14-0x15(高字節) 0x1a-0x1b(低字節)
    • FAT32 長文件解析

    我將a.txt文件改名為a0123456789.txt。

  • 長文件格式
  • 長文件名使用目錄登記項格式,占用2個字節。采用Unicode格式(一個字符占兩個字節16位)一個長文件名需要若干個這樣的不登記項,它們的含義表示為:

    偏移量

    長(字節)

    含義

    0

    1

    順序字節

    1~10

    10

    長文件名節(5個字符)

    11

    1

    文件屬性(3F)

    12

    1

    種類

    13

    1

    校驗和

    14~25

    12

    長文件名節(6個字符)

    26~27

    2

    起始簇號

    28~31

    4

    長文件名節(2個字符)

    所以一個目錄登記項可以表示5+6+2共13個字符。第一個字節的低5位指明它在文件名中的順序號,第6位為“1表明它是最后一項”,第5,7位未用置0。

  • 定位目錄項
  • 這里直接進行定位,定位方法和之前相同。

    最后兩行是短目錄項,一般遵從一下規則:

    1、系統取長文件名的前6個字符加上“~1”形成短文件名,其擴展名不變;

    2、如果已存在這個名字的文件,則符號“~”后的數字自動增加;

    3、如果文件名內存在windows非法的字符,則以下劃線“_”代替;

    上圖中可以看到其簇號還是0x08。

    總結

    以上是生活随笔為你收集整理的FAT16和FAT32文件定位的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。