MBXファイルのフォーマット

このページでは、DbxRescue がどのように DBXファイル および MBXファイル の中身を解析しているかを説明します。

ここで言う MBX ファイルとは、あくまで Outlook Express 4 用のデータファイルである。
Eudora などで使用している拡張子 .mbx のファイルとは異なるので注意。


ファイルのダンプ情報
開始アドレス データ
ファイルヘッダ
0x0000 4A 4D 46 36 03 00 01 00 09 00 00 00 09 00 00 00
0x36464D4A 0x00010003 0x00000009 0x00000009
0x0010 38 15 01 00 01 00 00 00 00 00 00 00 00 00 00 00
0x00011538 固定データ
0x0020… その他 52 (0x34) バイト (ヘッダ総合 0x54 バイト)
メッセージデータ1
0x0054 00 7F 00 7F 01 00 00 00 54 32 00 00 42 32 00 00
0x7F007F00 0x00000001 0x00003254 0x00003242
0x0064… 12,866 ( 0x3242 ) バイトのテキストデータ
0x3290 00 00
メッセージデータ2
0x32A0 00 7F 00 7F 02 00 00 00 50 1A 00 00 3F 1A 00 00
0x7F007F00 0x00000002 0x00001A50 0x00001A3F
0x32B0… 16,154 ( 0x1A3F ) バイトのテキストデータ
0x4CE0 00
(後略)
※メッセージデータの開始アドレスやサイズは、あくまで例です。


データの意味
種類 意味 サイズ(バイト)
FileHead MBXであることを示す 0x36464D4A  4
FileID メッセージ用であることを示す? 0x00010003  4
NumOfMsg 格納されたメッセージ数? メッセージ数?  4
FileSize ファイルサイズ ファイル全体のサイズ  4
MsgHead メッセージデータの開始位置 0x7F007F00  4
MsgID メッセージデータのID ファイル内では一意  4
BodySize メッセージデータ全体のサイズ ヘッダ16バイトとパディングを含む  4
UsedSize テキストデータのサイズ ヘッダとパディングを含まない  4
TextData テキストデータ メールデータ本体 UsedSize
Padding パディングデータ 0x00 BodySize - UsedSize - 16 ( 0x10 )


DbxRescueの動作
動作フェーズ 簡易モード 詳細モード
  1. ファイルヘッダのチェック
FileHead が 0x36464D4A であり、
FileID が 0x00010003 なら、
ファイル先頭から 0x54 バイトだけスキップする。
チェックは行わない。
  1. メッセージデータの開始位置をスキャン
4バイトずつ移動しながら DWORD を読み、0x7F007F00 であるところを探す。(MsgHeadのチェック) 1バイトずつ移動しながら DWORD を読み、0x7F007F00 であるところを探す。(MsgHeadのチェック)
  1. メッセージデータが有効かどうかをチェック
メッセージヘッダ16バイトを読み、以下の条件に当てはまるかをチェック。
  • UsedSize <= BodySize である。
当てはまらないものがあれば 2. へ。
  1. テキストデータの読み込み
BodySize - 16バイト 分のデータを読み、そのうち UsedSize 分をバッファに追加する。
  1. ファイルの生成
バッファの内容をファイルに保存し、バッファをクリアしてから 2. へ。 バッファの内容をファイルに保存し、バッファをクリアしたら、一旦MsgHeadの次の位置に戻ってから 2. へ。