【-1】Before

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


##**【0】我们先上干货,看到效果后,我们再说明每个步骤的缘由;**
![这里写图片描述](http://img.blog.csdn.net/20150912235204316)

【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】**
![这里写图片描述](http://img.blog.csdn.net/20150912235407418)

  • 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软盘以查看软盘的根目录条目+文件属性+文件内容的更多相关文章

  1. 查看已打包app的entitlements文件内容

    执行以下命令: codesign -d --ent :- /path/to/the.app https://developer.apple.com/library/content/technotes/ ...

  2. 查看pod创建时使用yaml文件内容

    除了 kubectl describe pod 以外,另一种获取 Pod 额外信息(除了 kubectl get pod)的方法 是给 kubectl get pod 增加 -o yaml 输出格式参 ...

  3. FAT12中,如何定位大于一个扇区(512B)的文件内容

    [0]README 0.1)本文旨在于 演示在FAT12中, 如何取定位大于 512B 的文件内容,和查看它: 0.2)如何制作FAT12文件系统,以及如何向文件中添加temp.txt文件,参见: { ...

  4. Linux 查看文件内容的命令

    转载自:新浪博客 (观看档案内容 : cat, tac, more, less, head, tail, nl, 刚刚我们提到的都只是在于显示档案的外观,或者是移动与复制一个档案或目录而已,那么如果我 ...

  5. Linux 文件内容查看工具介绍-cat,less,more,tail,head

    Linux 文件内容查看工具介绍 作者:北南南北来自:LinuxSir.Org摘要: 本文讲述几种常用文件内容的查看工具,比如cat.more.less.head.tail等,把这些工具最常用的参数. ...

  6. linux tail 命令详解!Linux 文件内容查看工具介绍

    转:http://blog.csdn.net/carzyer/article/details/4759593 1.cat 显示文件连接文件内容的工具: cat 是一个文本文件查看和连接工具.查看一个文 ...

  7. Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机

    Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机 Unity中制作一个望远镜 本节制作的望远镜,在鼠标左键按下时,看到的视图会变大:当不再按下的时候,会慢慢缩小成原来的视图.游戏中时常出现的 ...

  8. os引导程序boot 在根目录区寻找os加载程序文件loader 对应的根目录条目

    [0]README 0.0) source code from orange's implemention of a os and for complete code , please visit h ...

  9. Linux查看文件内容和压缩文件命令

    查看文件内容 一些重要的目录: /usr/share/    帮助文档.说明文档/var/log/       日志/var/run/       运行中程序/var/tmp       临时文件 根 ...

随机推荐

  1. duilib入门简明教程 -- XML基础类(7) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3343743.html 现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍. 前面的教程我们写了很多代码,为的是 ...

  2. error C2275 将此类型用作表达式非法

    http://blog.csdn.net/lqk1985/article/details/7389159 C2275: “size_t”: 将此类型用作表达式非法,同时还导致一堆变量未定义的bug. ...

  3. hdu 4956(思路题)

    Poor Hanamichi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. LeetCode OJ-- Length of Last Word

    https://oj.leetcode.com/problems/length-of-last-word/ 对一个字符串遍历,求最后一个单词的长度,如果有 ‘ ’,则切开了. 字符串的最后一个字符为 ...

  5. LeetCode OJ-- Jump Game

    https://oj.leetcode.com/problems/jump-game/ 从0开始,根据每一位上存的数值往前跳. 这道题给想复杂了... 记录当前位置 pos,记录可以调到的最远达位置为 ...

  6. (5)centos图形界面安装

    1.登录 2.先安装MATE可视化桌面 yum groups install "MATE Desktop" 选择y 3.安装X Window System:图形接口 yum gro ...

  7. 洛谷——1968 美元汇率(DP)

    题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...

  8. mac为photoshop添加字体

    https://jingyan.baidu.com/article/a3761b2b8484321576f9aaac.html 一. 1)点击Launchpad 2)搜索“字体册” 二 打开字体册 三 ...

  9. mac下virtualenv使用

    1  sudo pip install virtualenv 安装 2 找一合适目录装虚拟环境 virtualenv virzhongguo 3  激活虚拟环境 source virzhongguo/ ...

  10. flask的httponly默认值为True

    如图flask的app.py里显示app的默认配置,httponly默认值为true,所以如果开发者不修改这个配置的话,攻击者是无法通过xss攻击读取浏览器cookie这部分信息的. Cookie:s ...