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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

【-1】Before

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


【0】我們先上干貨,看到效果后,我們?cè)僬f(shuō)明每個(gè)步驟的緣由;

【1】進(jìn)入掛載目錄,添加相關(guān)文件(依個(gè)人意愿)

Attention):要知道,以上文件和文件目錄往 /tmp 的寫(xiě)入 就相當(dāng)于寫(xiě)入到 floppy.img 文件夾了,我們?cè)倏纯磼燧d信息:

【2】卸載塊設(shè)備/dev/loop1

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

Attention) FAT12文件系統(tǒng)用到扇區(qū)格式參見(jiàn):http://blog.csdn.net/pacosonswjtu/article/details/48391467的“【2.1】FAT12的引導(dǎo)扇區(qū)格式:”

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

(補(bǔ)充):

4. BPB_FATSz16= 每 FAT 扇區(qū)數(shù)= offset(22) + length(2) = 0x0009 = 9(即每個(gè)FAT占用9個(gè)扇區(qū))


【4】將為什么 RIVER.TXT 要從0x0002600這個(gè)字節(jié)開(kāi)始呢?

從1.44大小的格式,我們知道,FAT12文件系統(tǒng)下的軟盤結(jié)構(gòu)的第19個(gè)字節(jié)才是根目錄區(qū),而每個(gè)扇區(qū)=512字節(jié),所以19 * 512 =9728 = 0x2600處,Bingo!
而根目錄區(qū)的格式為:

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

  • 4.1.a)將 river.txt 的條目的32 個(gè) 字節(jié)復(fù)制下來(lái),如下:

    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 的所有簇號(hào)
    Attention):由上圖的軟盤結(jié)構(gòu)圖,我們知道FAT從第1個(gè)扇區(qū)開(kāi)始,一個(gè)扇區(qū)512個(gè)字節(jié),所以FAT從地址0x0200開(kāi)始;

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

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

  • 4.2.a.2) 我們轉(zhuǎn)到數(shù)據(jù)區(qū),看第3個(gè)簇內(nèi)容;(前面已經(jīng)提到,一個(gè)簇==一個(gè)或多個(gè)扇區(qū))

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

    (Bingo!)對(duì), filesystem 就應(yīng)該這么玩。


    (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 創(chuàng)建空虛擬軟盤
    /dev/zero : 在類UNIX 操作系統(tǒng)中, /dev/zero 是一個(gè)特殊的文件,當(dāng)你讀它的時(shí)候,它會(huì)提供無(wú)限的空字符(NULL, ASCII NUL, 0x00)。其中的一個(gè)典型用法是用它提供的字符流來(lái)覆蓋信息,另一個(gè)常見(jiàn)用法是產(chǎn)生一個(gè)特定大小的空白文件。

  • R2)sudo losetup /dev/loop1 floppy.img 給該軟盤文件關(guān)聯(lián)一個(gè)塊設(shè)備 /dev/loop1
    轉(zhuǎn)自: http://itlab.idcquan.com/linux/set/942370.html

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

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

Bingo!

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。