/ ----------------------------------------------------------------------------------- / iPhone OS 3.0 sys.dic format / ----------------------------------------------------------------------------------- アドレス サイズ 実データ(3.0標準のim/sys.dic) 内容 ------------------------------------------------------------------------------------- 00000000 0000048 ヘッダ 0000000 0000004 EF3105A9 マジックナンバー (ファイルサイズ ^ 0xEF718F77) 0000004 0000004 00000067 バージョン 0000008 0000004 00000000 ? 000000C 0000004 00025521 単語数 0000010 0000004 000006A8 左?コンテキストID 最大値 0000014 0000004 000006A8 右?コンテキストID 最大値 0000018 0000004 00119C86 セクション1 サイズ 000001C 0000004 001BFD98 セクション2 サイズ ( (単語数+1) * 0x0C ) ( [0x0C] = セクション2データ サイズ ) 0000020 0000004 0012F078 セクション3 サイズ 0000024 0000004 00000000 ? 0000028 0000020 "UTF-16LE" エンコード 00000048 02942F2 セクション1 (単語検索インデックス) 0000000 0000004 00000001 スタートデータ数? 0000004 0000004 0000001B スタートデータ ( [0x1B] => [0x18]|[0x03] => インデックステーブル(通常) オフセット[0x18] ) 0000008 0000004 0003902C インデックステーブル サイズ 000000C 0000004 0003A000 比較テーブル オフセット 0000010 0000004 000DFC86 比較テーブル サイズ 0000014 0000004 00000400 インデックステーブル1つ分のサイズを規定? 0000018 0000404 [11]インデックステーブル (通常) 000000 0000004 00000000 セクション2リンク 000004 0000400 テーブル[0x00-0xFF] 00000 0000004 セクション1リンク[0x00] 00004 0000004 セクション1リンク[0x01] 00008 0000004 セクション1リンク[0x02] --- --- --- --- 003FC 0000004 セクション1リンク[0xFF] --- --- [10]インデックステーブル (フラグ版) 000000 0000004 --- セクション2リンク 000004 0000020 --- ビットフラグ 000024 0000004 --- データ カウント = @dcount 000028 @dcount*4 --- テーブルデータ 00000 0000004 --- セクション1リンク[1char目] 00004 0000004 --- セクション1リンク[2char目] ... ... ... ... 003A000 00DFC86 [01]比較テーブル 000000 align4(@gsize+04) グループ[0] 00000 0000004 グループ サイズ = @gsize 00004 0000004 00000000 セクション2リンク 00008 align4(@gsize-04) 0000 @ssize+4 インデックス[0] 000 0000001 比較文字列 サイズ = @ssize @ssize 比較文字列 0000004 セクション2リンク ---- インデックス[1] ---- インデックス[2] ... ... ----- グループ[1] ----- グループ[2] ... ... 00119CCE 01BFD98 セクション2 ( MeCab 単語パラメータ ) 0000000 000000C 単語データ[0] 000000 0000002 左?コンテキストID 000002 0000002 右?コンテキストID (今のところ左ID=右ID) 000004 0000002 単語コスト 000006 0000002 第3パラメータ? 000008 0000004 セクション3リンク 000000C 000000C 単語データ[1] 0000018 000000C 単語データ[2] ... ... 002D9A66 012F078 セクション3 ( MeCab 追加パラメータ = 変換後文字列 ) 0000000 000000A "稲川淳二\0" UTF-16LE 文字列 000000A 000000A "吉田修一\0" ... ... ... ... ... ・セクション1リンクについて  下位2bitでリンクタイプを指定しています [31:2][1:0] [x][00b] データなし (下2bitがデータタイプ) [x][01b] 比較テーブル オフセット[x*4] [x][10b] インデックステーブル オフセット[x] (フラグ版) [x][11b] インデックステーブル オフセット[x] (通常版) *具体的には 000002A0 : CE 87 03 00 A5 FA 0D 00 00 00 00 00 BD FA 0D 00 ↑-------↑ [000387CE] = [000387CC] + [03]([11b]) セクション1のインデックステーブルの[000387CC]から通常版テーブルとして読み込みの意味 000002B0 : D5 FA 0D 00 71 FB 0D 00 00 00 00 00 00 00 00 00 ↑-------↑ [000DFAD5] = [000DFAD4] + [01]([01b]) セクション1の比較テーブルの[000DFAD4]から読み込みの意味 ・セクション2リンクについて  1byteのデータ数+3byteのセクション2オフセットになっています *具体的には 0003B000 : 02 00 09 30 68 30 70 30 FC 30 93 30 01 0D 02 00 ↑ ↑----↑ データ数 オフセット セクション2の[00020D]から[01]個のデータを参照の意味 ・比較テーブルについて 0003B160 : 03 77 02 00 46 00 00 00 00 00 00 00 01 30 17 7A ↑--------------------------------- 0003B170 : 02 00 03 30 4D 30 01 91 02 00 03 30 51 30 01 92 ----------------------------------------------- 0003B180 : 02 00 05 30 5D 30 89 30 01 93 02 00 05 30 68 30 ----------------------------------------------- 0003B190 : 8A 30 01 94 02 00 03 30 8D 30 01 95 02 00 0B 30 ----------------------------------------------- 0003B1A0 : 8D 30 57 30 93 30 53 30 4F 30 01 96 02 00 00 00 ---------------------------------------↑ ↑=↑ ↑----↑の部分 [00000046] = データサイズ[0x46]byte [00 000000] = セクション2リンク([00 000000]=なし) [01] = 単語の比較データサイズ[01]byte [30] = 比較データ列 [17 7A0200] = セクション2リンク [00027A]から[17]個のデータ参照 [03] = 単語の比較データサイズ[03]byte [30 4D 30] = 比較データ列 [01 910200] = セクション2リンク [000291]から[01]個のデータ参照 以下同様 [03] = [03] [30 51 30] [01 920200] = [000292] [01] [05] = [05] [30 5D 30 89 30] [01 930200] = [000293] [01] [05] = [05] [30 68 30 8A 30] [01 940200] = [000294] [01] [03] = [03] [30 8D 30] [01 950200] = [000295] [01] [0B] = [0B] [30 8D 30 57 30 93 30 53 30 4F 30] [01 960200] = [000296] [01] ↑=↑の部分 4byte単位で余っている部分を[00]で埋める(アライメントパッド)