Windows 2000 は元号情報をどこに保存しているか その1

Windows 2000 の元号情報が保存されている場所を探してみました

・GetDateFormat を実行して NTDLL と kernel32 にしかアクセスしていなくても、メモリ上に 1926 / 1912 / 1868 と言った情報がロードされている
・NTDLL と kernel32 には元号情報が保持されていない。
・バイナリデータ LOCALE.NLS 上に該当データがある

というわけで、NLS ファイルを簡単に解析してみた

OFFSET SIZE 意味 実際の値
0 4 NLS テーブルの数 0x7e
4 4 Table Start 0xc
8 4 Table Size(WORD) 0x16AD5
0xC 4 NLS1 Code 0x0401
0x10 4 NLS1 Table Start(WORD) 0x1FE
(0x3FC 開始)
0x14 4 NLS2 Code 0x0801
0x18 4 NLS2 Table Start(WORD) 0x566
(0xACC 開始)

多分頭はこう

日本語のローケルを抜き出してみる

0x26C 4 NLS76 Code 0x0411
0x270 4 NLS76 Table Start(WORD) 0xDFF0
(0x1BFE0 開始)

テーブル本体を見て見ると実は元号のデータは含まれていない

元号データは 2D800 以降に含まれていて、テーブルサイズは0x16AD5 なので
2D5AAが上記のテーブルの範囲と言うことになる。

つまり、テーブル2が存在するのだ ・ω・

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です