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が存在するのだ ・ω・
Comments