作者cyyang (CCC)
看板CSSE
标题Re: [问题] 硬碟问题
时间Sat May 5 15:47:59 2007
※ 引述《CuckooBoy (阿书)》之铭言:
: : 简单讲一讲, 不懂就去参考这份FAT32 File System Specification
: : 网址是 http://0rz.tw/f92BG
: : 认真读完就保证一定懂.
我真的强烈建议你要先看完上面所列的那份文件, 你的问题在里面就讲得很清楚.
: 这样说对吗....?
: 我用WinHex软体,看一个1G容量的CF卡的储存装置
: 1. 从BDB知道...
: 0B~0C:每一磁区的位元组数(此例为 512)
: 0D:每一磁丛所占磁区数(此例为 8)
: 2. 从FDB知道...
: 1C~1F:档案大小(此例为 000003=3个位元组)
: 1A~1B:磁丛指位器(此例为 000003=3)
: 由以上两点..
: 知道档案内容 在磁丛 3
: 磁丛从2开始
: 所以3-2=1 资料内容与FDB差 1个磁丛差=8个磁区=512*8=4096位元组=十六进制的1000
: FDB第一笔资料在1EA000
: 所以内容在1EA000+1000=1EB000开始
: 档案大小为3个位元组
: 所以1EB000~1EB002 就是我的档案内容?
: 如果,我讲对,那我有个问题....FAT1不是记录着每一个档案或次资料夹在磁区的那
: 一个cluster 位置之资讯吗?
: 我的FAT1像下面这样,好像跟我所讲的没什麽关联,看不出所以然,用不上的感觉.....
: F8 FF FF 0F FF FF FF FF FF FF FF 0F FF FF FF 0F
: 00 00 ........................................
就你文中有写到FDB第一笔资料在0x1EA000, 你知道这位址怎麽得到的吗? 我是建议
你先一步一步慢慢算, 而不是直接去搜寻某FDB特定字串, 然後号称知道是从这开始.
其实FAT32很简单, 从LBA 0开始, 就只是MBR, boot sector, FAT1, FAT2再加一些保留
区, 这样你自然可以算出cluster 2的位置, 在FAT32中, root directory是放在user
data 区域, 所以用FAT32 格式化後, root driectory通常在cluster 2, 但不是绝对,
一切仍以boot sector上的资讯为主.
你在FDB已经知道这file的起始cluster为3, 你就可以到FAT查询, 就用你的资料为例
F8 FF FF 0F FF FF FF FF FF FF FF 0F FF FF FF 0F
^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^
保留 保留 cluster 2 cluster 3
(root directory) (your file)
从上面就可以知道cluster 3的栏位是 0x0FFFFFFF, 所以这是最後一个相关cluster,
你从FDB得知这档案是3 bytes, 因此你在档案总管按右键内容应该可以知道这档案
大小是3 bytes, 磁碟大小是4096 bytes.
另外你也知道cluster 3是从0x1EB000开始, 所以你只要读0x1EB000即可, 而不是
你讲的0x1EB000 - 0x1EB002, 为什麽? 你一开始不就已经从boot sector知道
1 sector是512 bytes, 如果你只需要3 bytes, 那为什麽还要读 3 sectors?
以上我讲的都是以FAT32为主, FAT12/16又有些许不同, 我最後还是要强烈建议如果
真要学FAT, 你先去看懂那份文件, 如果看不懂英文, 那施威铭以前有本"MS-DOS 5.0
技术手册(2)彻底研究", 当中也有写到FAT12/16的东西, 各大图书馆或许会有.
不过如果只是要交作业, 那上面那段就当我没讲, 这些应该够你用.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.167.200.25
※ 编辑: cyyang 来自: 218.167.200.25 (05/05 15:49)
※ 编辑: cyyang 来自: 218.167.200.25 (05/05 16:06)
1F:推 pppig327:LBA0 应该指的是 boot 区吧,不包含 MBR 05/08 20:50