這是thriller寫(xiě)的WinXP Bootfont.bin 查看器。
綜合了幾篇相關(guān)文章。
可以打開(kāi)和顯示各種版本的BOOTFONT.BIN。
自帶7種BOOTFONT.BIN,分別是
BOOTFONT.BIN.jpn 日文版
BOOTFONT.BIN.kor 韓文版
BOOTFONT.BIN.ru 俄語(yǔ)版
BOOTFONT.BIN.chs 中文簡(jiǎn)體
BOOTFONT.BIN.cht 中文繁體
BOOTFONT.BIN.fr 法語(yǔ)版
BOOTFONT.BIN.ger 德語(yǔ)版
供參考。
bootfont.bin
是漢化引導(dǎo)菜單用的,刪除后引導(dǎo)菜單會(huì)變成英文
BOOTFONT.BIN是NTLDR和SETUPLDR.BIN使用的字體文件,它提供了Windows系統(tǒng)啟動(dòng)階段其他語(yǔ)言(非英語(yǔ))的字體點(diǎn)陣。本 文針對(duì)的BOOTFONT.BIN為中文版本W(wǎng)indows XP With SP2所附帶(Windows 2000/XP/2003使用的字庫(kù)文件完全相同),其他語(yǔ)言的應(yīng)該類(lèi)似。
用Ultraedit-32打開(kāi)BOOTFONT.BIN,可以發(fā)現(xiàn)頭四個(gè)字節(jié)為"MdeT",為什么要用這么奇怪的魔數(shù)呢?答案在泄漏的windows nt4源代碼中。在bootfont.h中對(duì)這個(gè)魔數(shù)進(jìn)行了定義:
+------------------------------------------+
| // Define signature value. |
| // |
| #define BOOTFONTBIN_SIGNATURE 0x5465644d |
+------------------------------------------+
0x5465644d即為"TedM",Windows最開(kāi)始的本地化版本是日文版,因此由日本的開(kāi)發(fā)人員做了最初的本地化工作,可以從ntos\boot\bootfont\readme.txt中看出來(lái):
+-----------------------------------------------------------------------+
| The jpn directory contains the original fntjapan.h that was once |
| compiled into the x86 boot loaders, and a program I wrote to generate |
| bootfont.bin for Japan from it. |
| |
| - tedm, 7/11/95, Tokyo |
+-----------------------------------------------------------------------+
0x04-0x07為語(yǔ)言代碼,對(duì)于中文則為0x804。
0x08-0x0b為BOOTFONT.BIN支持的單字節(jié)字符個(gè)數(shù)(NumSbcsChars)。
0x0c-0x0f為BOOTFONT.BIN支持的雙字節(jié)字符個(gè)數(shù)(NumDbcsChars)。
0x10-0x13為單字節(jié)字符點(diǎn)陣在文件中的偏移(SbcsOffset)。
0x14-0x17為雙字節(jié)字符點(diǎn)陣在文件中的偏移(DbcsOffset)。
0x18-0x1b為所有單字節(jié)字符點(diǎn)陣數(shù)據(jù)的總長(zhǎng)度(SbcsEntriesTotalSize)。
0x1c-0x1f為所有雙字節(jié)字符點(diǎn)陣數(shù)據(jù)的總長(zhǎng)度(DbcsEntriesTotalSize)。
0x20-0x2b為一個(gè)數(shù)組,存放了DBCS的前導(dǎo)字節(jié)范圍,最后以"\0\0"結(jié)尾,MAX_DBCS_RANGE的值當(dāng)前為5(DbcsLeadTable[(MAX_DBCS_RANGE+1)*2])。
0x2c表示字符的高度(CharacterImageHeight)。
0x2d表示字符的TopPad(CharacterTopPad)。
0x2e表示字符的BottomPad(CharacterBottomPad)。
0x2f表示單字節(jié)字符的寬度(CharacterImageSbcsWidth)。
0x30表示雙字節(jié)字符的寬度(CharacterImageDbcsWidth)。
以上為BOOTFONT.BIN的頭部,一般來(lái)說(shuō),接下來(lái)就是單字節(jié)字符的點(diǎn)陣了。根據(jù)頭部SbcsOffset的值,找到點(diǎn)陣的開(kāi)始位置。每一個(gè)單字節(jié) 字符需要19個(gè)字節(jié),第一個(gè)字節(jié)為ASCII碼,之后的16個(gè)字節(jié)即是點(diǎn)陣數(shù)據(jù)(根據(jù)字符的大小8x16,16個(gè)字節(jié)正好放下),最后兩個(gè)字節(jié)為該字符的 Unicode(小端)編碼;對(duì)于雙字節(jié)字符點(diǎn)陣,每個(gè)字符需要36個(gè)字節(jié),頭兩個(gè)字節(jié)為GB2312編碼,之后32個(gè)字節(jié)為點(diǎn)陣數(shù)據(jù),最后兩個(gè)字節(jié)為該 字符的Unicode(小端)編碼。