这是thriller写的WinXP Bootfont.bin 查看器。
综合了几篇相关文章。
可以打开和显示各种版本的BOOTFONT.BIN。
自带7种BOOTFONT.BIN,分别是
BOOTFONT.BIN.jpn 日文版
BOOTFONT.BIN.kor 韩文版
BOOTFONT.BIN.ru 俄语版
BOOTFONT.BIN.chs 中文简体
BOOTFONT.BIN.cht 中文繁体
BOOTFONT.BIN.fr 法语版
BOOTFONT.BIN.ger 德语版
供参考。
bootfont.bin
是汉化引导菜单用的,删除后引导菜单会变成英文
BOOTFONT.BIN是NTLDR和SETUPLDR.BIN使用的字体文件,它提供了Windows系统启动阶段其他语言(非英语)的字体点阵。本 文针对的BOOTFONT.BIN为中文版本Windows XP With SP2所附带(Windows 2000/XP/2003使用的字库文件完全相同),其他语言的应该类似。
用Ultraedit-32打开BOOTFONT.BIN,可以发现头四个字节为"MdeT",为什么要用这么奇怪的魔数呢?答案在泄漏的windows nt4源代码中。在bootfont.h中对这个魔数进行了定义:
+------------------------------------------+
| // Define signature value. |
| // |
| #define BOOTFONTBIN_SIGNATURE 0x5465644d |
+------------------------------------------+
0x5465644d即为"TedM",Windows最开始的本地化版本是日文版,因此由日本的开发人员做了最初的本地化工作,可以从ntos\boot\bootfont\readme.txt中看出来:
+-----------------------------------------------------------------------+
| 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为语言代码,对于中文则为0x804。
0x08-0x0b为BOOTFONT.BIN支持的单字节字符个数(NumSbcsChars)。
0x0c-0x0f为BOOTFONT.BIN支持的双字节字符个数(NumDbcsChars)。
0x10-0x13为单字节字符点阵在文件中的偏移(SbcsOffset)。
0x14-0x17为双字节字符点阵在文件中的偏移(DbcsOffset)。
0x18-0x1b为所有单字节字符点阵数据的总长度(SbcsEntriesTotalSize)。
0x1c-0x1f为所有双字节字符点阵数据的总长度(DbcsEntriesTotalSize)。
0x20-0x2b为一个数组,存放了DBCS的前导字节范围,最后以"\0\0"结尾,MAX_DBCS_RANGE的值当前为5(DbcsLeadTable[(MAX_DBCS_RANGE+1)*2])。
0x2c表示字符的高度(CharacterImageHeight)。
0x2d表示字符的TopPad(CharacterTopPad)。
0x2e表示字符的BottomPad(CharacterBottomPad)。
0x2f表示单字节字符的宽度(CharacterImageSbcsWidth)。
0x30表示双字节字符的宽度(CharacterImageDbcsWidth)。
以上为BOOTFONT.BIN的头部,一般来说,接下来就是单字节字符的点阵了。根据头部SbcsOffset的值,找到点阵的开始位置。每一个单字节 字符需要19个字节,第一个字节为ASCII码,之后的16个字节即是点阵数据(根据字符的大小8x16,16个字节正好放下),最后两个字节为该字符的 Unicode(小端)编码;对于双字节字符点阵,每个字符需要36个字节,头两个字节为GB2312编码,之后32个字节为点阵数据,最后两个字节为该 字符的Unicode(小端)编码。