バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFsのファイル上シミュレーションの話。
ディスクイメージを読み解く。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
FatFs Win32 ファイル上シミュレーションのディスクイメージ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
前回、「FatFs Win32 ファイル上シミュレーション」をしたわけだが、
projectフォルダにPhysicalDrive1ってファイルが出来ているはずだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あ!ホントだ!
ファイルが出来てる。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
これがディスクイメージだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ということは、僕たちはこれを直接バイナリエディタで見ていけば良いって感じかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうなるね。
MBR(Master Boot Record)の確認
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まずはMBRことMaster Boot Recordの確認だ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
Master Boot Record?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
以下は、Wikipediaからの引用だ。
マスターブートレコード(Master Boot Record、略称MBR)とは、PC/AT互換機に於いて、単数または複数のパーティションに分けられたディスクのパーティション外に存在する先頭セクタでブートセクタの一種である。PC/AT互換機では、BIOSがセクタ長が512バイトで先頭1セクタのみのロードしか保証しないため、サイズは512バイトである。0(先頭)~445(446バイト)にブートストラップローダ、440~444(4バイト)にDisk MBR signature、446~509(64バイト)にパーティションテーブル、510~511(2バイト)にブートシグニチャがある。
Wikipediaより(https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%96%E3%83%BC%E3%83%88%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
うーん。
パーティションが定義されてるってことになるのかな・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
そうそう。
今回の場合はパーティションは一個しかないので、MBRの中の一個のパーティションテーブルエントリを参照することで、そのパーティションの先頭セクタが分かる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
まずは、そのパーティションの先頭セクタを特定しないと始まらないってことか。
パーティションテーブルエントリの確認
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
とりあえず、バイナリエディタでMBR確認する。
MBRは必ず0セクタに配置される。
![struct MBR_t { BYTE MBR_bootcode[446]; MBR_Partation_t MBR_Partation[4]; WORD MBR_Sig; }; struct MBR_Partation_t { BYTE PT_BootID; BYTE PT_StartHd; WORD PT_StartCySc; BYTE PT_System; BYTE PT_EndHd; WORD PT_EndCySc; DWORD PT_LbaOfs; DWORD PT_LbaSize; }; FAT32、0x3F=63セクタ目にBPB(BIOS Parameter Block)](https://www.simulationroom999.com/blog/wp-content/uploads/2021/04/02_MBR-1024x507.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
なんかほとんど00hだね?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
先頭にはMBR_bootcodeという446byteの領域があって、内容としてはシステム依存ではあるが、一般的には00hで埋めるようだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
ということは、その446byteの次から始まってるのが、重要な情報ってことか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
重要なのはPT_SystemとPT_LbaOfs。
PT_Systemはそのパーティションのファイルシステムで、今回の場合はFAT32になってる。
PT_LbaOfsはBPBことBIOS Parameter Blockが埋まってるセクタを示す。
今回の場合だと0x3Fで63セクタ目にBPBが居るようだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
BPB?
BIOS Parameter Block?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁそのFATの詳細情報が埋まってるところだな。
内容については次回説明しよう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- FatFs Win32 ファイル上シミュレーションのディスクイメージを確認。
- PhysicalDrive1で生成されている。
- MBR(Master Boot Record)を確認
- FAT32であることを確認。
- BPB(BIOS Parameter Block)が63セクタ目にあることを確認。
バックナンバーはこちら。
コメント