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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容

發布時間:2023/12/3 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【-1】Before

for specific info , please visit http://wiki.osdev.org/Loopback_Device


【0】我們先上干貨,看到效果后,我們再說明每個步驟的緣由;

【1】進入掛載目錄,添加相關文件(依個人意愿)

Attention):要知道,以上文件和文件目錄往 /tmp 的寫入 就相當于寫入到 floppy.img 文件夾了,我們再看看掛載信息:

【2】卸載塊設備/dev/loop1

【3】以vim 命令打開 floppy.img 文件,并輸入 :%!xxd 以16進制查看該虛擬軟盤的內容;

Attention) FAT12文件系統用到扇區格式參見:http://blog.csdn.net/pacosonswjtu/article/details/48391467的“【2.1】FAT12的引導扇區格式:”

(糾錯1) 非常抱歉,上圖3.BPB_RootEntCnt=00e0=14 而不是15;

(補充):

4. BPB_FATSz16= 每 FAT 扇區數= offset(22) + length(2) = 0x0009 = 9(即每個FAT占用9個扇區)


【4】將為什么 RIVER.TXT 要從0x0002600這個字節開始呢?

從1.44大小的格式,我們知道,FAT12文件系統下的軟盤結構的第19個字節才是根目錄區,而每個扇區=512字節,所以19 * 512 =9728 = 0x2600處,Bingo!
而根目錄區的格式為:

  • 4.1) 找出river.txt的 在根目錄區的屬性值

  • 4.1.a)將 river.txt 的條目的32 個 字節復制下來,如下:

    0002600: 5249 5645 5220 2020 5458 5420 0000 0000 RIVER TXT ....0002610: 0000 0000 0000 f4b6 2c47 0300 1000 0000 ........,G......
  • 4.1.b)則 該文件的屬性如下表所示:

  • 4.2)在FAT中 尋找出 river.txt 的所有簇號
    Attention):由上圖的軟盤結構圖,我們知道FAT從第1個扇區開始,一個扇區512個字節,所以FAT從地址0x0200開始;

  • 4.2.a)0000200: f0 ff ff 00 f0 ff ff ff ff ff ff ff ff 0f 0000 …………….
    FAT表結構是怎樣的?參見 http://blog.csdn.net/pacosonswjtu/article/details/48391467

  • 4.2.a.1)我們看到,0-ff0、1-fff、2-000、3-fff、3-fff表示這個簇就是最后一個簇了,所以river.txt文件對應 的就是 簇3。
    (Attention):這里由于river.txt 只有15個字符,3個river strings 因此一個扇區就可以裝下了; 如果readers 有 interst, 不妨可以建立一個超過512字節(一個扇區)的文件,然后就可以演示出從FAT中找出該文件的所有簇號,不過你也可以參見 http://blog.csdn.net/pacosonswjtu/article/details/48391467中“【2.2】文件分配表-FAT”中的“看個荔枝”;

  • 4.2.a.2) 我們轉到數據區,看第3個簇內容;(前面已經提到,一個簇==一個或多個扇區)

  • 4.2.a.3)算數據區開始扇區號:
    step1) 通過文件系統的用到扇區數據結構找出 根目錄區條目數 BPB_RootEntCnt = 14 和 BPB_BytesPerSec = 512,(參見模塊3的第一張圖);
    step2) 所以算數據區開始扇區 =1 + 9 + 9 + 14 = 33 ,第33扇區的偏移量為 33*512 = 16896B, 16896/16=1056行,所以數據區的開始字節數為:16896B 。。。。(怎么計算出來的? 參見http://blog.csdn.net/pacosonswjtu/article/details/48391467 中的 “【2.3】根目錄區-root dir sector(如何計算根目錄區的扇區數量?)”)
    step3) 因為river.txt 的開始簇號為3,由于第1、2個FAT項不用,即簇0和簇1不用,所以簇號從2起算,即數據區的第一個扇區對應簇號2,所以簇號3對應第2個扇區,所以river.txt 的 起始地址為 16896 + 512 = 17408B,而17408 / 16 = 1088,正好與下圖匹配上。

    (Bingo!)對, filesystem 就應該這么玩。


    (Attention)以上演示效果完畢,下面,我們將制作FAT12虛擬軟盤并掛載到/tmp下的每一步的緣由;

【Reasons of precedure manufacturing virtual floppy with FAT12 file system】

  • R1)dd if=/dev/zero of=floppy.img bs=512 count=2880 創建空虛擬軟盤
    /dev/zero : 在類UNIX 操作系統中, /dev/zero 是一個特殊的文件,當你讀它的時候,它會提供無限的空字符(NULL, ASCII NUL, 0x00)。其中的一個典型用法是用它提供的字符流來覆蓋信息,另一個常見用法是產生一個特定大小的空白文件。

  • R2)sudo losetup /dev/loop1 floppy.img 給該軟盤文件關聯一個塊設備 /dev/loop1
    轉自: http://itlab.idcquan.com/linux/set/942370.html

    • loop設備介紹: loop 設備是一種偽設備(pseudo-device),或者也可以說是仿真設備。它能使我們像塊設備一樣訪問一個文件。在使用之前,一個loop設備必須要和一個文件進行連接。這種結合方式給用戶提供了一個替代塊特殊文件的接口。因此,如果這個文件包含有一個完整的文件系統,那么這個文件就可以像一個磁盤設備一樣被 mount 起來。
    • losetup 指令: 此命令用來設置循環設備。循環設備可把文件虛擬成塊設備,籍此來模擬整個文件系統,讓用戶得以將其視為硬盤驅動器,光驅或軟驅等設備,并掛入當作目錄來使用。

      losetup [ -e encryption ] [ -o offset ] loop_device file losetup [ -d ] loop_device -e 表示加密的方式-o 設置數據偏移量-d 卸載設備loop_device 循環設備名,在 linux 下如 /dev/loop0 , /dev/loop1 等。file 要與循環設備相關聯的文件名,這個往往是一個磁盤鏡象文件,如 *.img

Bingo!

總結

以上是生活随笔為你收集整理的制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容的全部內容,希望文章能夠幫你解決所遇到的問題。

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