wenjiang 的个人资料morning's blog照片日志列表更多 ![]() | 帮助 |
|
11月11日 金庸,琼瑶小说的特点一、金庸笔下的武功描写并不单纯指武功本身,它其实有着丰富的文化内涵。不同的人有着不同的武功,使用不同的兵刃,他们便有着不同的武功境界,同时也有着不同的人生境界。 二、“恰到好处”是中国哲学上的崇高境界。要做到“恰到好处”,必须要历经人生的各种磨炼,就如同一块璞,它得要经过千万次的打磨,才能成为美玉一样。金庸的武侠小说向人们展示的就是这样的一个过程,将璞打磨成美玉的过程。 三、金庸笔下的种种武功描写,非常独特,同时并不离谱,各有一定的道理可讲。这是因为,一方面,金庸重视武功的描写,因为作品中有很多矛盾,很多问题,要靠武功的打斗去化解、去解决,没有武功是断然不行的。但金庸同时又强调了武功的局限,因为武功并不是万能的。 四、金庸武侠小说创作的最大的一个特点,是它的外松内紧,也就是心态的松弛与精神的集中相结合。这就在有意无意之间,获得了雅文学与俗文学的共同性,分别综合了二者之长,而扬弃了二者之短,在雅文学与俗文学之间架起了一座桥梁。这就是金庸笔下的武打为什么能够雅俗共赏,好看而又耐看的原因。 五、金庸的武侠小说不同一般,原因很多,但重要的一点,还是表现在武功描写方面的不同流俗。在金庸的笔下,各种各样的武功,都做了个性化、艺术化的处理。 六、无论在现实生活中,还是在武侠小说中,武打固然牵涉到人的生死荣辱,是性命攸关的大事。但武侠小说中的武打描写又是供人欣赏,供人品味的。对此,金庸是想得透,放得开,写得好,他笔下的武打是于严肃之中见活泼,于真实之中见趣味。
金庸的武侠小说,已经成为二十世纪最有代表性的大众文学之一。那么通过金庸小说中的武打描写,我们看一看,我们到了二十世纪的下半叶,中国文化中,对于“武”这个概念的探讨,已经达到了什么样的高度? 金庸的武侠中的武打,它所带给我们的想像是空前的。之所以他的小说这么有魅力,在“武”这个方面,超越了前人。 在金庸笔下,那些使着奇奇怪怪兵刃的人,多数不是一流高手。你看金庸的小说,你放心,只要这个人物一出场,使用一个很奇怪的兵刃,你就可以断定,他肯定不是最主要的人物。上来一个老头,长着很长的胡子,手里拿着一对判官笔,你可以断定,这个人不是主要人物;主要人物没有使这些兵刃的,或者这个人就是性格奇怪之人。比如说,《天龙八部》里面,南海鳄神,这个人物一出场,手里拿着一个鳄鱼剪,一个大剪刀。他动不动就“咔嚓”一下,把人家脑袋剪下来,这个人你可以断定,他不是一流人物。 再比如说,李莫愁,手里拿着一柄拂尘,武功很厉害,她这个拂尘,不是扫地用的,不是掸沙发上的灰用的,你让她拂一下,就没命了。但是她也不是最高级的武侠人物,不是一流高手。武功的境界,在金庸笔下,一个没有出场的大侠,这个人叫独孤求败,在他的身上这个层次讲得极为清楚。他买了几把宝剑,给后人讲了这个道理。这个道理包含了,武功的几层境界。 第一层,他年轻的时候,使用一把非常锐利的宝剑。这个剑所向披靡,可以斩铜断铁。那么这代表一种少年气盛的境界,年少嘛,所向披靡,见谁跟谁辩论,都把人打败。我年轻的时候,大概也是这个样子,喜欢跟人家辩论,显示自己有学问,以打败别人为荣,回家很高兴--然后回家多吃两个肉饼。其实,现在想来那是很幼稚的。那是一个幼稚的阶段。 而超越这个阶段之后,他第二个阶段用的是一把轻剑,比较轻的宝剑。这时候功夫长了,能够举重若轻,这个时候能够干一番大事业。这是第二个阶段。 第三个阶段,他改用一把重剑,重剑无锋,我们常说,能够举重若轻,举重若轻是一个很好的境界。比这个更深,是举轻若重,举轻若重是更进一步。 那么到了最后,他用一把木剑,木头剑,这个木头剑是没有刃的,木剑本身不能伤人的。但是,这个木剑其实只是一个代表,说明他已经可以达到不用兵刃了,达到无剑的程度了。也就是说,他最后武功练到大成,是不依赖于外物。这个时候,他可以没有兵刃;也可以说,什么东西都是他的兵刃。 用金庸的原话讲,武功练到这个程度,飞花摘叶,皆可伤人。他随便拿一个东西就是兵刃,就练到这个程度。就是说,这其实是庄子讲的“不役于物”,不为外物所奴役,外物完全被我所控制,所以你看上去他是两手空空,其实他已经达到炉火纯青的程度了。而这个论述写的绝不仅仅是打架的境界,搏斗的境界,其实它是人生的境界。这种对人生境界的描述,中国人经常是用比喻的方式来写的。比如说,王国维先生在《人间词话》里用几句词,也论述了人生的几种境界,可能读过的朋友都知道。 第一种境界是:“昨夜西风凋碧树,独上高楼,望尽天涯路。”这是人生的第一种境界,在那块找啊,徘徊,有了疑问了;第二种境界是:“衣带渐宽终不悔,为伊消得人憔悴。”这是人生的第二种境界,就是说,你为了事业奋斗,艰难曲折,正走在长征路上呢,但是坚韧不拔。这是人生的第二种境界。第三种境界是:“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”满世界找了一圈,没找着;回来一看,就在那旮旯蹲着呢,豁然开朗。这是人生的第三种境界。 孔子也曾经讲人生的境界,孔子讲得更朴素,他就用人的年龄来讲:“吾十五志于学,二十而冠,三十而立,四十不惑,五十知天命,六十耳顺,七十而从心所欲不逾矩。”,他讲最后的这个境界“从心所欲不逾矩” ,就像独孤求败最后那个无剑的阶段一样,做起事情来随心所欲。但是,随心所欲做的事情,全是合乎规矩的,你随便一做,就合乎规矩了。就好像在篮球场任何一个地方,你把球随便一扔,好像随便扔到了,“啪”,就进篮了,就是人生最后能达到这个境界,这就叫自由。自由,不是说,不听话,谁管你都不听,那不叫自由,那叫“二百五”,自由是要经过这样一个磨炼的阶段,最后一出手就“投篮”进去了,这才叫自由。所以一部中国哲学所讲的,就是要恰到好处,而恰到好处不是马路上随便能拣来的。而金庸他通过一个独特的视角,通过武打,通过武功探讨了这个人生境界,他把这个武功哲学,提高到人生的方法论上来论述。所以很多青少年都从中得到了,人生方面的领悟。我们从金庸的小说中也好,从其他武侠小说中也好,不可能学到实战中打架的方法,不可能对你打架有很大的帮助,但是你可以学到人生的方法,可以得到人生的启悟。比如说,百花错拳之美妙--《书剑恩仇录》里,陈家洛打的拳,叫百花错拳,这个名字很有意思,百花,好像是色彩缤纷,但是是错的,但是错中又有不错,这个很奥妙,每一拳打出来似乎不对,但是加起来又是绝对正确的。像段誉所使的六脉神剑之奇幻,这个六脉神剑很有意思,他一旦使出来威力无比,他有时候使不出来,这很奇怪。看我们很多运动员也是,他一旦发挥出来金牌就是他的,甚至有的项目前四名都是中国的,但是一旦六脉神剑不灵了,使不出来,我们就一败涂地,连一个进半决赛的都没有。所以这就很像段誉的六脉神剑。 还有化功大法之阴险。就是说,人家辛辛苦苦练了几十年的功夫,给人家化掉。跟化功大法相近的一个,叫北冥神功。这个是一正一邪。北冥神功是吸取人家的功力,但是这个正、邪的区别还显得不太清晰。我很推崇金庸笔下,北冥神功这种工夫,善于学习他人的本事,这个本事大的人,他不是说,天生的自己什么都学,他碰到别人,别人说一句话对他有用,他马上就记住,马上就融到自己的思想系统当中来,这是一项很重要的本事。还有像辟邪剑法之妖孽,像降龙十八掌之刚猛,还有杨过的黯然销魂掌之恍惚。我们想想杨过的黯然销魂掌,这个掌太厉害了,这个掌是威力很大。但是,不是什么人都能使,包括杨过自己也不是什么时候都能使用的,你必须自己黯然销魂的时候,心里愁得不行的时候,不想活了,这个时候这个功夫威力无穷,一旦你心情开朗,这功夫就不行,就打不过别人了。这里面很有道理。中国有个成语叫哀兵必胜,置之死地而后生,你都不想活了,他反而能够胜利,所以说韩信让他的军队背水而战,背水一战,说,咱们都不活了,今个拼了,反而大获全胜。这里边是有生生死死变换的道理的。 而金庸笔下的这些武功,我们如果说,把它都排列出来,那是排列不完的,排列一天恐怕也排列不完,举不胜举,精彩纷呈。一方面写得很神奇,听上去真妙。但是,同时很难得的是,他又写得尽量可信,合乎武术原理,合乎我们对人体极限的想像。我们想像,人体到底能干什么?他不是写得没边,有想像。金庸他既然写的这种武侠,是现实风格的武侠,他就和还珠楼主迥然不同,他不写还珠楼主那种绝对超自然的,没有。 那么我上大学的时候,看过许许多多的武侠小说,后来都忘了,留下的就是这些著名小说家的作品。其中,的确有一些写得很荒诞的武侠小说,那作者就是乱编,他没办法了。比如,写一个人物,被困在山洞里边了,出不去。山洞里边门口,堵上了多少万斤的大石头,出不去,在里边要困死,怎么办啊?在墙上摸索摸索,摸索出一套武功秘笈来。然后按照这个武功秘笈就练,练了两个时辰,武功大成。好吧,这一下子人就变了,一拳打出去,把这山打翻了,他就出去了。我说,你这不是吃饱了撑的吗!这说明,这个作者的无能,这只说明这个作者,说明你没有办法,正常地解决人物的困境,只能靠“怪、力、乱、神”来解决。就好像我们说,一些电视剧里边故事编不下去了,“故事不够,爱情来凑。”故事不够了,加一个第三者吧,把故事继续演下去。 而在金庸的笔下,没有这些荒谬的东西。金庸特别强调了武功的局限。所以他一方面讲武功神奇,另一方面讲武功的局限。比如,金庸强调一个人武功再强,一掌打出去也不可能伤到三、五丈之外,这就是他把自己限制住了。我们觉得,他写得可信的。就是这一掌打出去,可以不接触人体,而伤到人体,这是可能的。但是必须离得比较近,不可能说,离得三、五丈还能伤人,这是不可信的。所以说,这是比较写实的。 再有,少林寺有72项绝技,叫少林寺72绝技。金庸说,天下不可能有一个人把它们都学全了,因为每一项绝技都博大精深,再厉害的少林高僧,一辈子的精力都用上,也只能学会十几项,学会了十几项一辈子就过去了。而且你学会几项,就可以横行天下,无敌了,没有必要学会72项。都学会72项干嘛呀?没有必要的。可是,在《天龙八部》中,我们发现,有一个人物居然把它们都学会了。所以这时候,我们就会心里存一个疑问,不是说学不会吗?怎么有一个人都学会了呢?这个人叫鸠摩智。那么到后来,我们就发现这个人是有问题的。他所谓学会少林寺72绝技是假的!他自有一套叫小无象功,而且正因为他强行练这个少林寺72绝技,最后走火入魔,身体出了大问题,就好像一个人本来患点小感冒,每天打大量的抗生素,最后就会出来别的大病。 那么所有这些问题,都是合乎科学道理的,又合乎浪漫主义的想像。比如说,鸠摩智强行练功,走火入魔怎么办呢?这每天受这个病痛的折磨,不能告诉别人,还要装作一个武林高手,最后恰恰是恶贯满盈的时候,掉到了枯井底污泥处。在枯井底污泥处,遇到段誉的北冥神功,段誉无意中把他的功夫给吸走了。好不容易辛辛苦苦练了,这么些年的功夫全部废掉。而废掉之后,柳暗花明,人获得了新生。废尽了武功之后,鸠摩智忽然就大悟,大彻大悟,才知道人练武功是次要的,参透佛法才是重要的。所以他此后回到了吐蕃,回到西藏,专心研究佛法,成为一代高僧。 鸠摩智是历史上的真人,是佛教史上赫赫有名的一个大哲学家,但是历史上没有记载他曾经会武功,没有记载他曾经有过这么一段经历。那么金庸就把这个真人的历史,给他加上这么一段会武功的经历,又解释了他怎么废掉武功,怎么最后得来佛法,所以读来是既引人入胜,又非常可信。这是金庸了不起的地方。所以你看金庸笔下,有武功和人物和情节、结构都联系在一起,所以他形成了一种独特的武功美学。金庸笔下写武打精彩的段落数不胜数,要是举例子读的话,会读上几天。 那么我下面举一段很朴实的打斗场面,不是两个人武打,是萧峰打虎。我举一段萧峰打虎的场面,这是《天龙八部》第二十六回,叫“赤手屠熊搏虎”,写主人公萧峰,他流落到女真部落,就是现在的东北。东北那个时候,环境还没有破坏,东北虎遍地都是的时候,看见有一人在那里打虎。那个虎很凶猛,那个人招架不住,其实那个人也是历史上赫赫有名的人物,就是完颜阿骨打。萧峰叫道,老兄,我来帮你打虎。 我们知道,打虎是很难写的,打虎难写,有两个因素,一个是现实生活中打虎的事情发生得很少,谁敢打虎?即使发生过,看见的人又很少,这是一个难点;第二个难点,自从《水浒传》中,写了武松打虎之后,谁还敢再写打虎!那不是没事找拍吗?已经前边已经有打虎了,写武松打虎写得那么好,你还敢写打虎?你有什么本事敢写打虎?就你也配写打虎吗? 但是金庸他这样的作家,在心里有一种挑战意识,他说,我要试一试,我写一段打虎看怎么样。里边中间一段这样写的:“萧峰斜刺里冲将过去,拦住了两头猛虎的去路。”记住,这是两头猛虎,“那猎人见萧陡然冲出,吃了一惊,大声呼喝叫嚷,说的不是汉人语言。”因为那个猎人,就是女真族的首领完颜阿骨打,人家虽然是国家最高领导人,人家还亲自出来干活呢!亲自出来打猎,回去给老百姓吃。“萧峰不知他说些什么,当下也不理会,提起右手,对准老虎额脑门便是一掌,砰的一声响,那头猛虎翻身摔了个跟斗,吼声如雷,又向萧峰扑来。萧峰适才这一掌使了七成力,纵是武高强之士,受在身上也非脑浆迸裂不可,但猛虎头坚骨粗,这一记裂石开碑的掌力打在头上,居然只不过摔了个跟斗,又即扑上。” 我们看,这一段写得非常写实,因为前边有了萧峰的武功天下一流,那个降龙十八掌,威力无人能比,打在石碑上石碑都可以打裂的,居然打在老虎头上,老虎只翻了一个跟头,非常可信。也说明这个老虎的厉害,写出了虎和人的区别,一个七、八百斤的动物,哪能被你一掌就打死!就是萧峰这样的人,都没把他写成这种神不可测的神功,不是神功。 接下来,萧峰赞道:“好家伙,真有你的!”侧身开,右手自上而下斜掠,“嚓”的一声,斩在猛虎腰间。这一斩,他加了一成力,那猛虎向前冲出几步,脚步蹒跚,他写得非常准确,既没打爬下,也没有说纹丝不动,打得脚步蹒跚。”说明腰受伤了,已打成腰间盘突出了,“随即没命价纵跃奔逃。萧峰抢上两步,右手一挽,已抓住了虎尾,大喝一声,左手也抓到了虎尾之上,是两只手在抓住虎尾的,奋力,双手使劲回拉,那猛虎正自发力前冲,被他这么一拉,两股劲力一迸,虎身直飞向半空。” 这个想像非常好,这合乎物理学道理的,就是两股力相等,一下子虎身子就迸到半空中了,那猎人提着铁叉,正在和另一头猛虎厮斗。完颜阿骨打,武功不如他,所以就借助一个工具,拿着一个杈子。突见萧峰竟将猛虎摔向空中,这一惊当真非同小可。只见那猛虎在半空中张开大口,伸出利爪,从空扑落。从空中就扑下来了。萧峰一声断喝,双掌齐出,“啪”一声闷响,霹在猛虎的肚腹之上。虎腹是柔软之处,这一招排云双掌正是萧峰的得意功夫,那大虫登时五脏碎裂,在地下翻滚一会,倒在雪中死了。 我们看这一段描写,萧峰打虎写得既惊险又神奇,但是又真实可信,萧峰是书中的第一好汉,降龙十八掌打在虎头上没怎么样,翻一个跟头,腰上砍了一掌,老虎还能蹿起来,最后他是借老虎从空中下扑之力,加上自己的力量,而且打在老虎最柔软的部位,打它的内脏,才把老虎打死。所以这里既写出了萧峰的神勇,也写出了老虎的厉害,老虎如果不厉害,英雄的威风是显不出来的。所以说,我们看,这一点他既继承了武松打虎,武松打虎也是要把老虎写得很厉害。如果老虎不厉害,武松威风就出不来。但是又和那个绝不雷同,和武松打虎和李逵杀虎,都绝不雷同。所以这一段萧峰打虎,并不是金庸小说中最精彩的武打。但是一样写得这样活灵活现,一样让人印象深刻。而且这一段又是他下一步结识完颜阿骨打,进入女真部落,最后回到大辽的重要转折点之一。正是通过这个打虎,使完颜阿骨打佩服他,两个人结为朋友。然后又遇到大辽国的皇帝出来,然后他回到大辽,最后完颜阿骨打又去救他,等等。所以这一段描写,就是和情节和人物,都结合在一起的。 那么也有其他一些学者,概括金庸的武功,说他的武功还是性格化的。比如说,岳不群这种人,他就学辟邪剑法,所以他人是阴毒之人;像脾气暴躁的,叫武臣道长,他的武功叫72路追魂夺命剑,一个年纪很大老头子,脾气还是很暴躁,善恶分明;像黄蓉,黄蓉是一个机灵鬼,聪明绝顶的小姑娘,所以她不到两个时辰,就学会了一套叫逍遥游的拳法。这个逍遥游要求人非常聪明,才能学会。然后,郭靖看得很羡慕,郭靖也想学,一看黄蓉这么快就学会了,我也要学这个逍遥游。洪七公就告诫他说,这个逍遥游不是你能学的,你很笨,你学不会,说你就算拼命,也学不会。我就拼命反复练嘛,这笨鸟先飞。洪七公就说,你就算拼命记住了,你使出来,一点也不逍遥,所以你打出来的东西,都是笨手笨脚,愁眉苦脸的。这个逍遥游被你一使,就变成了苦恼爬,而不是逍遥游,在你手下变成苦恼爬了。所以我们看郭靖这个人,他是不能学这种很聪明的武功的,他就是靠本事,靠实实在在的力量。所以这是可以说是,武打性格化所规定的。 再有,艺术化。比如说,《天龙八部》里面,虚竹和丁春秋之战,每一招都凶险,招招凶险攻向敌人要害,但是偏偏的,姿势却那样地幽雅、美观,像我们前面讲的洪七公和黄蓉过招一样,像武打一样。还有,金庸继承了前人,他的武功的名称,都是极富美学魅力的,他的武功的名称,把一部中国的文化都点活了,中国传统文学中的诗、词、歌、赋,都用到武功上了。 还有,金庸武打又很讲究和环境的变化。他武打的场景化,这是超越前人的。因为金庸他年轻的时候,他做过编剧,他搞过话剧,搞过影视,这些他都做过,所以他非常注意舞台效果,所以金庸他没写长武打。他把环境写得很清楚,什么人是表演者,什么人是观看者,什么人是偷看者,都清清楚楚。比如说,《射雕英雄传》里面,郭靖与黄蓉在牛家村养伤,两个人在夹壁里面,然后看到这个屋里边,不断地发生各种故事,各种人来,他俩在旁边看。我们想,这不就是一个话剧舞台吗?就是一个话剧舞台,两个人旁边,然后看着这里演各种戏。他们能看见别人,别人看不见他们。 金庸非常善于写这种偷看、偷听的场面,从中引发出情节的转折。特别像一些大的打斗场面,简直就像电视台举办的那种知识大赛,歌舞大赛一样,有的时候像春节晚会。你像《倚天屠龙记》里面,六大门派围攻光明顶,那一路一路站起来打,那就像一个春节晚会一样的。所以我建议我们春节晚会的节目组,一定要看看金庸的小说,从中吸取一点灵感。 大战,像大战聚贤庄,大战陆家庄,一场接一场,那比写千军万马的厮杀,还要好看,还要经典。有的时候,我们虽然看到小说里,写的是千军万马的厮杀,但出来的就两人,打一下就下去了,别人都是傻乎乎的观众。而金庸小说中,是很多人在乱打,然后又写得很清楚,条分缕析。 从小的方面讲,金庸的武打还注意张弛结合,注意武打的趣味化。他的武打经常是打一会儿,很严肃、很紧张,中间穿插一些趣味。比如,《笑傲江湖》,江湖里面有六个同胞兄弟,叫“桃谷六仙”。“桃谷六仙”武功非常高,但是头脑好像不太灵,傻啦巴叽的,父母不太讲究优生学,一胎生了六个,智力不太高,每天在一起辩论,谁先生出来的,谁第六个生出来的等等,这些很高深的问题。所以他们六个经常一出场,就把严肃的场合搅乱,而且他们武功非常猛,他们经常抬起一个人来,要把他撕成若干块。所以这样的情况出现,就使严肃中加入了趣味。所以说,你看金庸的小说的武打场面,相当于欣赏晚会,没有人说,看着一半晚会要出去打架了;晚会很好,我出去把邻居他们家玻璃砸了,没有! 所以金庸的小说对于青少年,无论从理论上讲,还是从我们实际的感受中讲,都只有向上的、健康的、鼓舞的作用。而且,正像你不能看了《红楼梦》中的菜,就照着那个菜谱去烹饪一样的,金庸小说中的武打,你也不能看了之后,就照猫画虎地出去,跟人家搏斗。小说中的菜谱,如果照着那个菜谱,来做出来的菜,据说都是很难吃的,包括我们讲的黄蓉,和洪七公做的那几味菜。在书里看得奇妙无比,但是我想,你要真那么做出来,真的会好吃?我对此事画问号的。 而武侠小说中的武功,我们也应该抱同样的态度,阅读这些武打场面,我们在得到审美享受的同时,应该获得的是人生方面的启悟,而绝不是我们要跟谁三拳两脚过招方面的启发。如果不信,你就可以去尝试一下,现实生活中的打斗,不但和武侠小说中的描写相距甚远,和我们武术学院,所教会的那些武术套路,都相距甚远。我自己有一个专门学武术的同学,他学了武术几年毕业之后,跟同学说,咱们学了几年武术,也从来没跟人家过过招,哪天试一试。 有一次,在饭馆里喝酒,和邻桌的一伙黑道上的朋友,发生冲突,就打起来了。还没等他们亮出招式,就被人家--那群小流氓,用啤酒瓶子一顿,都给打到桌子下面去了。就是他们这时候才发现,学校里学的武术,原来没什么太大的用处。那么回到武侠小说中来,武侠小说中的武功,不能当成技术来看,而应该当成艺术来看。所以,我希望大家通过武功看到艺术,看到人性,看到我们博大精深的中华文明。 这一讲就讲到这儿,谢谢大家! 演员表演时时刻刻都是高潮,剧情发展始终半死不活,故事只有曲折没有起伏,逻辑只有天然没有必然 对女主角要求同样绝对简单:美丽清纯,一脸苦相。表演基本功很差不怕,台词念不清楚不怕,笑得比哭的更难看更好——因为琼瑶剧的女演员哭的时候绝对比笑的时候多。 11月5日 实现一个小型的内核类库考虑到C语言在写代码时的一些限制,花了几天时间写了一个小库.封装了C++的支持(C++ Runtime),一个基本的Driver框架(CDriver,CDevice,CPnpDevice),一个完善的USB过滤框架(CUSBFilterDevice).
编译后代码略大于C语言的,不过比起DriverStudio这类框架生成的文件则小的多了.
可用于编写NT式驱动,用于应用程序开发,例如 内核Hook.
可用于编写USB过滤驱动,只需重载对应的USB控制函数即可完成大多数功能编写. 10月25日 80后做到了这些就成熟了每天11:00点前睡觉,每天7:30点前起床; 10月14日 星际争霸汉化总结结束星际争霸汉化的研究,做一下总结: 汉化一个英文游戏,主要包含2个方面: 1.原始字符串的提取并翻译,有几种方式: 1.1 静态资源汉化:提取资源,然后翻译其中的字符,并回写,这涉及很多方面,包括资源格式,当然,工作量往往很大,而且会存在汉化遗漏的问题. 1.2 实时动态汉化:在字符串即将显示时,进行即时汉化,由于是实时获取,所以,只需分析内存中有关字符串处理的结构即可,把游戏大致玩一遍,保存所有程序传过来的字符串,然后把这些字符串翻译做成字典,那么,在使用时,根据这个字典实时翻译即可.当然这其中包含一些技巧,例如 字符串通配算法,翻译缓存,字典的管理.它们决定了实时翻译的速度. 2.修正中文显示支持: 2.1 中文的显示 ANSI语言的程序员(其实绝大多数没双字节概念的程序员都有这个问题)会假设字符串是单字节的,直接++,而不是_tcsinc. 由于ASCII的字符数很有限,游戏开发者为了优化游戏性能,可能会做成字库,但中文就死翘翘了. 两种办法解决: 2.1.1 制作一个包含游戏用到几种大小的包含所有字符的字库(字符图片),这个办法性能一般较快,因为等需要显示时,直接把字符所对应的点阵拷贝过去就可以了,但是由于中文(仅GB2312部分)字符在7000左右,如果游戏用到了3个大小的字体,哦...可以想象这个字库是多大了. 2.1.2 现在的计算机处理字符已经非常快了,另外,游戏出现大量对白的画面毕竟少数,所以,采用GDI绘制到一个bitmap缓冲,然后贴图,这也是一个办法,比起前者,灵活性较高.通过算法优化,速度不比前者差.(现在支持中文/日文/韩文的游戏一般采用这个办法) 2.2 更多信息 我们要显示字符,不可能仅仅把字符贴到(0,0)的位置上,还包括以下信息 2.2.0 绘图目标:surface/缓冲的起始地址,宽度,高度,色深,最终的字符串图片会合成到这个缓存的准确内存地址. 2.2.1 绘图坐标:决定字符串的显示位置 2.2.2 绘图区域:决定字符串的区域,有多少宽,有多少高 2.2.3 字符串风格:斜体/粗体,字体大小,这些决定了我们该使用的中文字体的height和weight 2.2.4 颜色:是的,还有颜色,当然,可能还包括透明度,先生成256色深的白底黑字的图片,然后转成具有alpha等级的对应颜色点阵图. 2.2.4 其他:默认的单字符宽度,默认的TAB宽度等 10月5日 修改WindowsXP/2003,让它跑得更快!最近认真看了一下Intel的算术库,对其中的SSE2的运用印象深刻.
然后猛然想到 windows 2003在使用FPU87呢,还是SSE2呢?
经过调试,很遗憾,系统使用的是传统的FPU87的指令集,这实在是浪费CPU的能量啊.
于是操起OllyDbg,打开msvcrt.dll,ntdll.dll改写了一些代码.
1._ftol: VC7.1之前编译的函数按默认设置都会调用此函数进行浮点转整形,对于脚本引擎等涉及频繁浮点整形转化的程序很有意义
改写如下:
cvttsd2si eax, [esp+arg_0]
retn 2.fabs: VC未开启内联,或低于VC7.1时被调用,用于abs~
改写如下:
fld qword ptr [esp+4]
fabs retn 3.
其他浮点函数atan/ceil/exp/floor/log/log10/modf/pow
这些在msvcrt.dll是有开关函数的 _set_SSE2_enable,虽然MSDN说如果CPU支持会自动开启,但是其实是如果CPU支持将允许你启用,不等于自动开启
代码片段:
77BE1499 8325 845DBF77 00 and dword ptr [77BF5D84], 0
77BE14A0 8325 805DBF77 00 and dword ptr [77BF5D80], 0 // 直接都改成 or 1 77BE14A7 |. F645 EB 04 test byte ptr [ebp-15], 4 77BE14AB |. 74 13 je short msvcrt.77BE14C0 77BE14AD |. E8 4EFFFFFF call msvcrt.77BE1400 //进行无效指令计算 77BE14B2 |. 85C0 test eax, eax 77BE14B4 |. 74 0A je short msvcrt.77BE14C0 77BE14B6 |. C705 845DBF77 01000000 mov dword ptr [77BF5D84], 1 // 如果支持 77BF5D84 设为1,但是却没有把77BF5D80设为1 77BE14C0 |> 8B4D FC mov ecx, dword ptr [ebp-4] OK,这就好办了
or dword ptr [77BF5D80], 1
这样就强制开启了.
对于ntdll.dll,大部分函数没有SSE2的代码,只有ceil,floor,直接去掉头部的jmp即可.
额外的:
vcpkg5.5自带了这个patch,当VC6IDE加载vcpkg时自动patch msvcrt.dll,提升VC6的浮点性能.显然,内存patch仅作用于当前进程,对系统其他进程没有帮助,推荐patch系统文件,这样所有系统中运行的软件都会受益.
对于开发人员: 如果你在用 VC6或可能会调用msvcrt.dll中的浮点运算函数(就算你不调用,系统自身dll也会调用,因为它是 NT CRT DLL),那么显然我们不能去Patch用户计算机中的文件,启动时执行以下代码,有益于提高速度. 调用永远是安全的,因为这个函数会将设置与屏蔽位取与,所以,只有在SSE2指令集的计算机中在最终生效. typedef int (_cdecl *PFN_set_SSE2_enable)(int flag); PFN_set_SSE2_enable pfn_set_SSE2_enable; pfn_set_SSE2_enable=(PFN_set_SSE2_enable)GetProcAddress(GetModuleHandle(_T("msvcrt.dll")),"_set_SSE2_enable"); if (pfn_set_SSE2_enable) pfn_set_SSE2_enable(1); 注意: 9月25日 VC10.0 Beta1比较VC8.0,VC9.0的不可靠的 /MP选项,在10.0 终于可以稳定使用了.
编译时 cl.exe会生成 2~3个进程,基本上把CPU的能量都发挥出来了.编译10几个库文件,节约的时间相当可观.
VCPKG5.3的代码在使用VC6的库文件和VC10.0的编译器情况下,一切OK.当然,那个 crt_ex.lib 是我写的小Patch lib,解决一些函数不存在的问题.
Deleting intermediate files and output files for project 'vcpkg - Win32 Unicode Release'.
--------------------Configuration: vcpkg - Win32 Unicode Release-------------------- Version: VCPKG 5.3(Unicode,Build:Sep 24 2009 16:55:45),Author: morning,EMail: ywjheart@gmail.com Component: WDK/PSDK(CRT6.0,ATL7.1),PSDK2003Feb,DDK2K,WTL8.1,DXSDK9 vcpkg: info: Add Option: /wd4786 vcpkg: info: Add Option: /wd4127 vcpkg: info: Add Option: /wd4201 vcpkg: info: Add Option: /wd4660 vcpkg: info: Add Option: /wd4231 vcpkg: info: Add Option: /D DDKENV_BUILD=1 vcpkg: info: Add Option: /wd4786 vcpkg: info: Add Option: /wd4127 vcpkg: info: Add Option: /wd4201 vcpkg: info: Add Option: /wd4660 vcpkg: info: Add Option: /wd4231 vcpkg: info: Add Option: /D DDKENV_BUILD=1 vcpkg: info: Add Option: /RELEASE vcpkg: info: Add Option: /OPT:REF vcpkg: info: Add Option: /OPT:ICF vcpkg: info: Add Option: /ALIGN:512 vcpkg: info: Add Option: /FILEALIGN:512 vcpkg: info: Add Option: /ignore:4010,4037,4039,4065,4070,4078,4087,4089,4099,4221,4210,4108 vcpkg: info: Delete Option: /pdb:none vcpkg: info: Add Library: crt_ex.lib Compiler: WDK(32bit) Compiling resources... Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1 Copyright (C) Microsoft Corporation. All rights reserved. Compiling... stdafx.cpp Automatically linking with libbasesuwdk.lib Automatically linking with libhooksuwdk.lib Automatically linking with libassuwdk.lib Compiling... AddonHook.cpp BuildHook.cpp CmdAnalyst.cpp compiler.cpp helpex.cpp msdev_patch.cpp util.cpp vcpkg.cpp ComHook.cpp ProcessExitMon.cpp RegMon.cpp varmgr.cpp Generating Code... Linking... Creating library R:\TEMP\Unicode_Release/!vcpkg.lib and object R:\TEMP\Unicode_Release/!vcpkg.exp !vcpkg.pkg - 0 error(s), 0 warning(s) 9月21日 vcpkg 5.3相信很多人都和我一样,正在使用最新的PSDK/MSDN了,但是VC6并不能支持F1键直接查询这些新版帮助的中的信息.
vcpkg5.3 添加一个老版本有的功能,但是这个更强大.
老版本
原理:
采用COM虚函数表覆盖的办法拦截了 对帮助的调用,
功能:
实现 可选的使用VS .net 的帮助,用户可以自定义ms-help 命名空间.
不足:
它依赖于 VC6对应的VSHelp.dll的接口.调用新帮助库时,使用COM接口.
配置方式:
<ExHelp enable="0" url="ms-help://MS.MSDNQTR.v90.chs" />
新版:
原理:
不再需要VSHelp.dll,vcpkg自身包含了相关接口(是的,喜欢清爽的朋友可以立刻去把它删了,哈哈),VC6 IDE调用帮助接口时自动调用VCpkg提供的接口.
由于老版本需要额外的创建新帮助库的实例,需要耗费额外的时间,而这个新版则相对简洁,直接打开用户指定程序.
功能:
实现可选的使用任何帮助,用户可以指定执行文件和参数,根据喜好,可以配置成调用本地的MSDN帮助库,也可以打开网页查询MSDN网站,甚至可以打开网页查询google.com
配置方式:
<ExHelp enable="1" exe="some.exe" url="someurl"/> ,其中 url 部分可包含 $(keyword),调用时会展开成当前需要查询的关键字
例如:
<ExHelp enable="1" exe="D:\tools\MSHelp2\H2Viewer\H2Viewer.exe" url="/appID vchelp /XNav /PageTab 2 /helpcol MS.MSDNQTR.v90.chs /filterquery /index "$(keyword)"" />
无论新老版本,当 enable=0时,不改变VC6的行为,执行默认的帮助调用. 9月18日 Using the Optimizing VC7 compiler with the VC6 IDE,with DEBUGGINGUsing the Optimizing VC7 compiler with the VC6 IDE,with DEBUGGING 2009.09.18 from the source of atl/mfc in vc7x series,wo can see something interesting,that vc7 is able to output pdb files in the format used in vc6,the options is as following: however,vc7 toolset refuse the options if we add to commandline. prepares: start patch: 2. modify the linker
4.in link.exe,search the string ?Open@PDB@@SAHPBD0KPAJQADPAPAU1@@Z ,and change it to ?Open@PDB@@SAHPAD0KPAJQADPAPAU1@@Z 5.copy the mspdb60.dll v6.2 to bin folder. all done.now you can new a console project, and build the debug configuration,open the output file in a hex editor,you can find the signature of the old pdb format,"NB10",set a break in the function "main",and press F5, after break,you can see variables,callstack,and etc.
【原创】让VC7系列生成VC6支持PDB格式,以便VC6IDE可以调试让VC7系列生成VC6支持PDB格式,以便VC6IDE可以调试 我们知道 阅读VC7系列的 atl/mfc 源代码可以看到,VC7似乎具备生成 vc6 pdb文件的能力,其中参数分别是 但是,很遗憾,如果我们把这个参数加上,它们纷纷表示,不认识. 准备工作: 开始修改 2.修改连接器 改成
4.在link.exe中把 ?Open@PDB@@SAHPBD0KPAJQADPAPAU1@@Z 改成 ?Open@PDB@@SAHPAD0KPAJQADPAPAU1@@Z 5.从PSDK/DDK任何能找到 pdb60.dll的地方把 6.2 版的pdb60.dll 拷贝进去
源代码中加上 2. 现在,可以继续使用 VC6这个轻快的IDE,配合VAX的书写代码提示,然后用VC7.1这个更标准的编译器编译了 enjoy it! 9月14日 vcpkg 5.0v5.0 (2009-9-14)
1. 代码重构 1.1 移除 tinyxml,改用自己写的XML处理模块,支持UTF8/UNICODE/ANSI 1.2 去掉了部分不常用特性,例如:dll加密,编译工具替换 1.4 新的命令行词法分析模块,可以通过定义关键字规则/默认规则,较好的分析已知和未知的选项,分解后的结构易于后期处理 1.3 现在内置 类C语言脚本引擎(不区分大小写),取代原来通过XML定义关键字进行编译器选择和命令行修改的方式, 脚本引擎可以访问绝大多数命令行读写操作,实现数据分析和修改 1.2 XML结构配套调整 email me to get the new version. 9月11日 copyanyway写批处理文件时遇到拷贝文件失败的问题,so 写了一个不屈不挠,几乎非拷贝成功不可的batch代码
功能:
拷贝文件,如果目标文件已经存在,则会删除或改名(无法删除时,改名后的文件会在重启后删除)后再进行拷贝
用法:
在批处理文件头部加上
set myrand=selfdel_%random%
set bRestartrun=false 以后可以任意调用 call :copyanyway 文件名 路径 文件名必须是仅名称部分,不含路径
路径不需要加反斜杠结尾
提示:文件名或路径如果包含空格,则必须加上引号
用法举例:
@echo off
set myrand=selfdel_%random% set bRestartrun=false call :copyanyway symbolcheck.dll %windir%\system32
源代码:
rem------------------- copyanyway ------------------------
:copyanyway rem the original code written by morning.ye if exist "%2\%1" ( del /F /Q "%2\%1" >nul if not exist "%2\%1" goto copyanyway_docopy rem try to rename it in rand filename.
if exist "%2\%1.%myrand%.bak" ( del /F /Q "%2\%1.%myrand%.bak" ) if not exist "%2\%1.%myrand%.bak" ( echo ren "%2\%1" "%1.%myrand%.bak" ren "%2\%1" "%1.%myrand%.bak" >nul if not exist "%2\%1" ( call :copyanyway_resartdel "%2\%1.%myrand%.bak" goto copyanyway_docopy ) ) rem try again,i think it should be ok anyway.
if exist "%2\%1.%myrand%.bak.bak" ( del /F /Q "%2\%1.%myrand%.bak.bak" ) if not exist "%2\%1.%myrand%.bak.bak" ( echo ren "%2\%1" "%1.%myrand%.bak.bak" ren "%2\%1" "%1.%myrand%.bak.bak" >nul if not exist "%2\%1" ( call :copyanyway_resartdel "%2\%1.%myrand%.bak.bak" goto copyanyway_docopy ) ) rem failed,display as copy.
echo copy %1 %2\%1 echo 0 file copied. goto :eof ) :copyanyway_docopy echo copy %1 %2\%1 copy /Y %1 %2\%1 goto :eof :copyanyway_resartdel if exist %1 ( call :runonce_batch_append del /F /Q %1 ) goto :eof rem------------------- runonce batch file ------------------------
:runonce_batch_append rem the original code written by morning.ye if "%bRestartrun%"=="false" ( set bRestartrun=true rem empty existed file,and add file head
echo @echo off > "%APPDATA%\%myrand%.bat" rem create loader file,and we don't have to care is wether the selfdel operation has been added in runonce batch file
echo @echo off > "%APPDATA%\%myrand%ldr.bat" rem batfile may be deleted by user,so add self reg cleanup echo reg delete HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce /v %myrand% /f >> "%APPDATA%\%myrand%ldr.bat" echo del /F /Q "%APPDATA%\%myrand%.bat" >> "%APPDATA%\%myrand%ldr.bat" echo del /F /Q "%APPDATA%\%myrand%ldr.bat" >> "%APPDATA%\%myrand%ldr.bat" rem create reg runonce info
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce /v %myrand% /d "%APPDATA%\%myrand%ldr.bat" /f >nul ) rem append to batch file echo %* >> "%APPDATA%\%myrand%.bat" goto :eof 8月23日 vmware 5.5 rip为了减少vmware的资源占用,也为了还原系统后快速安装vmware,制作了此vmware5.5绿色版.
网络连接使用winpe的netcfg.exe工具进行配置,支持桥接方式联网.不安装额外的服务(DHCP,NAT等统统不需要),不需要虚拟网卡.包含windows vmware tools,linux等平台的没有包含.
使用方法见压缩包内说明,大小11M.
安装脚本借鉴了很多网上的vmware绿化脚本,在此表示感谢.分享仅用于技术交流.
[分享]regvsdll这是一个注册VS dll的小工具,方便想对 VS 软件动手动脚的朋友.这是前几天制作 MSDN 7.0(VS2002/2003的帮助)绿色版的副产品.因为看到dexplore.exe并没有以来.net,所以就提取出来,用这个版本也可以看 windows 7 的SDK的帮助(命令行:dexplore.exe /helpcol ms-help://MS.W7SDK.1033),安装windows7SDK,直接执行win32doc对应的msi,并不检查.net(甚好!)
回到最初的话题.
VS因为各版本并存,CLASSID保存在产品所在的注册表路径下,所以,比起标准的COM Dll注册,多了额外的两个导出函数,VSDllRegisterServer,VSDllUnregisterServer,与不含VS前缀的函数相比,这两个函数有一个参数,LPCWSTR pszRegRoot,用于指定注册表根路径,而不含前缀的则使用dll默认的注册表路径.
typedef HRESULT (WINAPI *pVSRegisterProc)(LPCWSTR pszRegRoot);
typedef HRESULT (WINAPI *pVSUnregisterProc)(LPCWSTR pszRegRoot); 请新建一个 console 工程,删除 main函数,用以下代码覆盖即可(如果你没有CStdString,则新建console工程,1.添加MFC支持,或,2添加atl支持,然后 #define CStdString CString,以及A/W版本).
提取版的mshelp2,以及regvsdll的源代码在此下载: http://cid-2067fca683114503.skydrive.live.com/browse.aspx/Public/mshelp2/ [暂存][部分完成]适用于windows2000的来自windowsXP的msgina本工程的目的是将windows Xp的登录界面移植到windows2000
目前遗留问题:
用于windows2000的winlogon.exe不会去调用xp版本中的无名函数,所以需要通过我们的gina stub实现调用 LogonUI 和 winlogon之间的RPC 通讯会导致线程异常,估计是5.0 和 5.1 之间定义或结构大小有差异 目前已经实现的: 1.windows xp的msgina.dll在2000系统下加载,实现 标准GINA 功能 2.windows xp的logonUI.exe在2000系统下可独立启动(但还不能被winlogon进程调用) 3.如果替换windows2000的msgina,则本gina stub 可以使得windows2000使用windows xp引入的新的蓝色关机画面 目前包含的工程:
1.xp系统文件:gdiplus.dll ,duser.dll ,User Account Pictures 这些不需要修改 2.shell32 (myshell),此工程会被来自xp系统的dll调用,用于实现windows2000系统shell32不具备的功能 3.shsvcs (mysvcs),此工程会被来自xp系统的msgina.dll,shgina.dll调用,用于支持这些dll对此dll的依赖 4.ginaproxy (ginaps),此工程会被 shgina.dll调用,用于自动动态链接当前实际使用的gina.dll 5.uxtheme (mytheme),此工程会被来自xp系统的logonui.exe调用,用于支持这dll对此dll的依赖 6.gina (mygina),用于stub/hook xp的msgina,为其与windows2000上的winlogon.exe相互调用提供桥梁,并内存patch其部分代码,以便使其能运行在windows2000的系统上,文件名可用msgina.dll或其他任意名称,推荐使用msgina.dll,因为系统中许多组件存在对此文件名的检查,如果不是msgina.dll会被禁止一些功能. 7.shgina,这是来自xp系统的文件,经过少量修改,需要调用 ginaps.dll 8.logonui 少量patch,需要调用 mytheme,myshell,shgina 9.msgina 较多patch,需要调用 myshell,mygina,必须由mygina加载 由于只是一段时间code后,进行的crack娱乐,此工程暂停.等忙过一段时间再继续来玩这个~ 分享:修正版dbgvsvc(dbgview 服务端)前几天调试winlogon.exe,用了dbgview的互联功能,但是发现始终连接不上,而且服务启动一会就自动停止了.我用的是dbgview 4.76.follow me,and fix it!
首先从dbgview.exe资源中解压出来: dbgv.sys,dbgvsvc.exe.
然后,创建一个批处理文件,例如 install.bat,内容如下:
@echo off
copy dbgv.sys %systemroot%\system32\
copy dbgvsvc.exe %systemroot%\system32\ %systemroot%\system32\dbgvsvc.exe -install
sc config "DebugViewService" start= auto net start "DebugViewService" pause
运行此批处理文件,即可安装dbgview服务端服务,并设为自动运行.
打开Tcpview.exe,反复启动服务端,发现端口是递增的,OK,看来服务端用的端口是自动分配.然后打开dbgview.exe,试着连接局域网上的任意计算机,发现尝试连接2020~2029端口,OK,难怪连接不上了.
打开 ollydbg(windbg不方便直接修改内存汇编)
找到 socket.bind的引用
00401824 66:8B50 08 mov dx, word ptr [eax+8]
00401828 53 push ebx ; /NetLong 00401829 66:899424 940>mov word ptr [esp+194], dx 00401831 E8 AA160000 call <jmp.&WS2_32.#8_htonl> 00401836 57 push edi ; /AddrLen => 10 (16.) 00401837 8D8C24 940100>lea ecx, dword ptr [esp+194] ; | 0040183E 898424 980100>mov dword ptr [esp+198], eax 00401845 51 push ecx ; |pSockAddr 00401846 33C0 xor eax, eax ; | 00401848 |. 56 push esi ; |Socket 00401849 |. 66:898424 9E0>mov word ptr [esp+19E], ax ; | 00401851 |. E8 84160000 call <jmp.&WS2_32.#2_bind> ; \bind 显然,我们需要将端口固定到能够被搜索的范围,patch 如下,我图省事,就不理会端口被占用的情况了
00401824 66:8B50 08 mov dx, word ptr [eax+8] 00401828 90 nop ; /NetLong 00401829 66:899424 90010000 mov word ptr [esp+190], dx 00401831 B8 07E40000 mov eax, 0E407 00401836 57 push edi ; /AddrLen => 10 (16.) 00401837 8D8C24 94010000 lea ecx, dword ptr [esp+194] ; | 0040183E 899C24 98010000 mov dword ptr [esp+198], ebx 00401845 51 push ecx ; |pSockAddr 00401846 90 nop ; | 00401847 90 nop 00401848 |. 56 push esi ; |Socket 00401849 |. 66:898424 9E010000 mov word ptr [esp+19E], ax ; | 00401851 |. E8 84160000 call <jmp.&WS2_32.#2_bind> ; \bind 修改后固定使用 2020端口,这样世界就连通啦~
然后解决服首先应该想到务启动后没多久就自动停止的问题.
首先应该想到的就是 select 的超时,非常运气,果然如此,dbgvsvc检测到超时后就"自行了断"了,这可不行,应该继续检测等待啊.
so patch as following.
040191F |. E8 3C100000 call dbgvsvc.00402960
00401924 |. 83C4 0C add esp, 0C 00401927 |. 85C0 test eax, eax 00401929 |. 0F84 F5010000 je dbgvsvc.00401B24 0040192F |. 8D5424 78 lea edx, dword ptr [esp+78] 00401933 |. 52 push edx ; /pTimeout 00401934 |. 53 push ebx ; |Exceptfds 00401935 |. 53 push ebx ; |Writefds 00401936 |. 8D8424 940000>lea eax, dword ptr [esp+94] ; | 0040193D |. 50 push eax ; |Readfds 0040193E |. 6A 40 push 40 ; |nfds = 40 (64.) 00401940 |. 89B424 A00000>mov dword ptr [esp+A0], esi ; | 00401947 |. C78424 9C0000>mov dword ptr [esp+9C], 1 ; | 00401952 |. C78424 8C0000>mov dword ptr [esp+8C], 0A ; | 0040195D |. 899C24 900000>mov dword ptr [esp+90], ebx ; | 00401964 |. E8 59150000 call <jmp.&WS2_32.#18_select> ; \select 00401969 |. 83F8 FF cmp eax, -1 0040196C |. 0F84 F7040000 je dbgvsvc.00401E69 00401972 |. 8D8C24 880000>lea ecx, dword ptr [esp+88] 00401979 |. 51 push ecx 0040197A |. 56 push esi 0040197B |. E8 3C150000 call <jmp.&WS2_32.#151___WSAFDIsSet> 00401980 |. 85C0 test eax, eax 00401982 |. 0F84 E1040000 je dbgvsvc.00401E69 只需修改一行代码
00401982 |.^\74 97 \je short dbgvsvc.0040191B
00401984 |. 90 nop 00401985 |. 90 nop 00401986 |. 90 nop 00401987 |. 90 nop OK,这样超时后继续进入等待.
还剩下一个问题,如果一旦连接,客户端断开,那么服务也会自行了断.怎么办呢?由于代码跨度比较大,懒得patch了.反正一般连接上之后也不用反复断开再连上,实在需要的话,设置服务自动重启~.
现在重启服务端计算机,启动后客户端计算机可以立刻连上服务端,监视调试字符输出,此服务最大的用途是,可以接收即将关机时的调试输出.,当然,调试全屏程序也很方便.
enjoy this patch!
//================================================================
额外的,remove.bat:
@echo off
net stop "DebugViewService"
rem 强制结束服务 taskkill /f /im dbgvsvc.exe rem 自带的这个删除不好用 ::dbgvsvc.exe -remove sc delete "DebugViewService" del /F %systemroot%\system32\dbgv.sys del /F %systemroot%\system32\dbgvsvc.exe pause
搬家了,今天网络通啦今天来安装ADSL了,速度还不错. 调试winlogon.exe时遇到的一个疑问[628] <OnLoad_MSGINA>:PID:274,TID:77E77CC4,APP:\??\C:\WINDOWS\system32\winlogon.exe
[1144] <OnLoad_MSGINA>:PID:478,TID:77E77CC4,APP:C:\WINDOWS\system32\logonui.exe 不同的进程ID,相同的线程ID
8月11日 5秒钟启动windows2003,并支持和XP一样的登录界面1.Nod32 2.7的内核服务往往会卡住,将其设置 手动启动,并去掉NOD32的GUI的自动启动,写一个DelayLoader,启动系统后5秒再启动内核服务,10秒后再启动GUI,这样一般可以保证它们有充足的时间慢慢启动,随后对GUI进行内存patch,去掉部分提示(这个使用libBaeWnd类写,配合以前写驱动用的Service控制代码,哦,还有libhook,几分钟搞定)
2.破解 sfc_os.dll,关掉系统对系统盘的监视,当然也不再进行文件保护了,节约系统开销.(此破解方法源于网络上对XP的破解,开调试可以很快定位修改点)
3.破解Winlogon.exe,去掉激活校验,并可以删掉 OEMBin.* 4个文件,节约系统开销,也节约了20M左右的空间,另外,破解后可以方便的进行 Server 和WorkStation的切换.(使用antiwpa-2[1].0-winxp-2k3.zip,使用前把系统代码页切换到english,否则,程序会傻傻的.我的系统是english的但是代码页设置成了中文GBK,所以在这一步卡了一段时间)
4.破解 MSGINA.dll,使得在Server情况下也能正常使用LogonUI.exe,这一点不是为了加快启动速度,只是美化,因为除了这一点都可以通过注册表等设置成和XP一样,唯独这一点必须进行文件破解.破解后可以使用各种绚丽的登录界面,例如现在非常流行的Windows7的登录界面.(这是体力活,因为不想在ghost前安装VM,所以修改后得多次重启验证,做到能少修改则少修改,最终只需要修改4处代码即可在登录,注销,锁定等状态下使用绚丽的LoginUI.exe作为登录界面).
5.卸载掉内置的.net 1.0 1.1,我很反感.net,下载 dotnetfx_cleanup_tool,对其配置进行修改后可以方便的卸载掉2003系统内置的.net模块,如果需要恢复,命令行下输入: rundll32.exe setupApi, InstallHinfSection netfx_install 132 netfxocm.inf ,几秒钟即可恢复内置的.net,不需要重启.
6.删除 Distributed Transaction Coordinator,输入命令: rundll32.exe setupApi, InstallHinfSection dtc_uninstall 132 dtcnt5.inf,这个总是自动启动,删除比较省事
7.删除 pchealth,输入命令: rundll32.exe setupApi, InstallHinfSection DefaultUninstall 132 pchealth.inf,似乎从windowsMe开始的一个东西,但不知道何用,删之
8.清除开始菜单上的 outlook express图标,shmgrate.exe OCInstallHideOE
9.去掉Ctrl+Alt+Del,设成自动登录
// -----以下无关启动速度
10.这是为了更快的浏览网页,编译代码,安装RamDisc,分配给它768M,感觉足以.对不方便开启预编译的工程,效果很明显,VC8以后微软用一个聪明的办法优化了编译中间文件管理( mspdbsrv.exe ),效果不明显;对VC8以前的版本效果很好.IE的临时文件也指向这个磁盘
11. 去掉 TortoiseSVN 的Cache,可以极大提高explorer.exe的响应速度
OK,到此除了借助 windbg,ultraedit,基本没有使用外部工具,优化2003,在我的HP540上的Windows 2003 SE 可以在5秒进入桌面,并很快光标停止忙碌,fine!
共花了一个下午加一个晚上的时间搞定!
关键字: windows 2003,优化,提速,loginui,登录界面,login screen,optimize |
|
||||
|
|