·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> VC汉化 >> ProcDump 字号的修改-C 程序字号修改另一例    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

ProcDump 字号的修改-C 程序字号修改另一例

作者: 梁利峰 来源:点睛工作室 时间:2003-08-02 点击:8020


ProcDump 字号的修改
        —— C 程序字号修改另一例


声明

个人可以自由转载本文,不过应保持原文的完整性,并通知我;商业转载先请和我联系。

本文没有任何明确或不明确地提示说本文完全正确,阅读和使用本文的内容是您自己的选择,本人不负任何责任。

如果您发现本文有错漏的地方,请您给我指出;如果有什么不理解的,请您给我提出。

意见、建议和提出的问题最好写在我的主页 http://llf.126.com 的留言版上。

ProcDump 的问题

如果使用过 ProcDump 的汉化版的话(这里指 1.5 版的汉化版,新版的汉化我没有见到),应该会有印象,它的主窗体的字体显示的太小,不是我们熟悉的“宋体,9”,但是其它窗体却是正常的,为什么会这样呢?因为其它窗体全都是通过 Dialog 格式的资源创建的,对于这种情况,用 eXeScope 这种资源编辑器就可以修改它的字体字号,但是它的主窗体却不是这样,而是使用 CreateWindow 函数创建并初始化的,这种情况其实比较普遍,只是如果不刻意的设置字体的话,字体将是“System,8”,而这种“System,8”显示出来其实和“宋体,12”是基本一样的,虽然大了一些,倒也过得去,所以可以肯定,ProcDump 在这里是设置了字体的。

我这一次使用的是 ProcDump 1.6 Ultra 2 英文版 ,为了检测方便,查找主窗体按钮“Unpack”,并把它修改成“解压缩”,运行程序,字体果然难看! :)

再次利用 Trw2000 ,选择 ProcDump.exe ,使用“bpx CreateFont”中断,程序没有中断的运行起来了,所以它没有调用 CreateFont 函数,这就比较奇怪了,没有使用 CreateFont 函数怎么设置的字体呢?

运行 eXeScope ,选择 ProcDump.exe ,察看 Import 项(函数导入表,顺便说一下,上一次我所说的用 Trw2000 解压缩的方法解出来的程序不能在其它的机器上运行,就是因为 Import 表不对,不过我目前还不知道如何修复)中的 GDI32.DLL ,可以看到只有一项:CreateFontIndirectA ,原来如此,它是使用 CreateFontIndirectA 直接设置的字体。(形似 xxxxIndirect 这样的 API 函数一般总是直接调用方式,比如 CreateFont 函数在内部调用 CreateFontIndirect 实现字体的设置,不过程序也可以直接调用 CreateFontIndirect 而不调用 CreateFont)

首先熟悉一下 CreateFontIndirectA 函数的调用方式,通过查找 MSDN ,我们知道此函数只有一个参数,是一个指向 LOGFONT 结构的指针。

再次利用 Trw2000 ,选择 ProcDump.exe ,使用“bpx CreateFontIndirectA”中断,出现了 Trw2000 的调试屏幕,断点在 CreateFontIndirectA 的入口处。键入“pmodule”,回到 ProcDump 的代码区,上面一次调用是 CreateWindow ,并不是我们期望的 CreateFontIndirectA ,这说明 CreateWindow 内部也调用 CreateFontIndirectA ,不过这和我们没有关系,所以继续,直到下一次碰上前一条语句就是“CALL GDI!CreateFontIndirectA”,再上面一条语句是“PUSH 00405B37”(此数字可能不同,而且我也记不太清了,所以只作为示例),上面我们知道,这个 00405B37 就是那个指针参数,所以键入“dd 00405B37”,显示出来的数据是“FF FF FF F5 …………”,而其后更有“90 01”和“MS Sans Serif”等字样,上一次在修改 WinAMP 的字体的时候我们知道,需要把 F5 改成 F4 ,这一次再试一下,用“e 00405B37”指令把 F5 改成 F4 ,继续运行程序,知道以后此程序多次调用这一个地方,最后程序运行起来,字体正常了。

然后在可执行文件里查找“FF FF FF F5”,没有找到,奇怪,那么,查找“MS Sans Serif”好了,只找到一个,所以就是我们要找的,向上看,原来不是“FF FF FF F5”,而是“F5 FF FF FF”,这样说来,这并不是一个整体,而是因为源程序在一起初始化,所以编译器才把它们放在一起的,不过不管怎么说,对我们并没有妨碍,把“F5 FF FF FF”修改成“F4 FF FF FF”,再次运行程序,字体正常了。(同样的,也可以把字体名都修改成空格以便使用缺省字体)

好了,我说过,这种主窗体不使用资源的程序很多,所以如果有另外的程序出现这样的字体问题,同样也可以使用这种方法,不过具体是使用 CreateFont 还是使用 CreateFontIndirect 函数倒不一定,需要自己测试。

点睛工作室·梁利锋 结稿于 2000.6.11

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): 字体 ProcDump 脱壳

·上一篇: WinAMP 字号的修改-C 程序字号修改一例 ·下一篇: C 程序字号的修改

· 版权申明: 本文引自《点睛工作室》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《点睛工作室》[ 作者: 梁利峰],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号