·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 编程知识 >> pediy之画猫篇    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

pediy之画猫篇

作者: 雅枫 来源:汉化教学 时间:2003-12-11 点击:9524

    pediy是高深的东东,要进化成pll621老大类的"超级牛人",没几年的努力+天赋是不行地,8过似我等超级菜鸟,玩玩几个api为软件"加点料"还是可以地,这不,偶对着教程(虎),欺负了一下radasm(画成了猫:),所以就叫"画猫"篇了^_^.这篇文章没啥新意,希望对还没有入门的菜鸟们一点帮助吧.
    大家知道radasm在9x下不能输入俺们的方块字(会死得很惨),我又没能力修正其编辑器(看雪上的修正版虽然能输入但不能编辑),所以偶就想给他增加个功能.调用外部编辑器打开它编辑了.偶用到的东东有trw2000,ollydbg,lordpe,exescope,hedit(任意编辑器),我还用到了w32dasm,8过不用也可以.
    初探:研究可行性,在radasm的工程窗口有个右键菜单,最适合加上打开的功能了(8错8错,用exescope加上个"用其他编辑器打开"呵呵,但现在他啥也干不了,别急,我们还没加功能呢),用trw载如radasm,下断点bpx createfilea(这个api用于打开文件,文件操作少不了他)先bd*然后g,就出来了主界面,打开一个工程,用ctrl+m调出主界面,be*,然后双击一个文件,不出所料,中断了下来我发现压入的地址是:440F3E,D 440F3E,果然出来了文件地址,然后G,又打开个别的文件,发现压入的还是440F3E(兴奋呀,这个太简单了,文件名地址是不变的)加上我们的代码,调用外部编辑器打开就可以了,有三个函数供我们使用:WINEXEC,ShellExecute,CreateProcess,最后一个参数太多,偶头疼,第一个简单,不过太呆板,我就选择了第二个,其参数如下

HINSTANCE ShellExecute(

    HWND hwnd, // handle to parent window
    LPCTSTR lpOperation, // pointer to string that specifies operation to perform
    LPCTSTR lpFile, // pointer to filename or folder name string
    LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
    LPCTSTR lpDirectory, // pointer to string that specifies default directory
    INT nShowCmd  // whether file is shown when opened
   );

所以我们可以改成

PUSH 5    // SW_SHOW
PUSH 0
PUSH 0
PUSH 440F3E      //文件地址
PUSH XXXXXX    //"OPEN" 的地址
PUSH O
CALL ShellExecuteA
就可以了.
代码放到哪儿呢?,这么短的代码放在文件头0X300处就8错了.先别急着写,我们先找菜单调用的地方:
:bpx sendmessage(注意不是sendmessagea我就在这儿栽了个跟头)
:BD*
:G
出来了主界面,打开一个工程CTRL+M调出TRW,
:BE*
:G
点击一个菜单(HELP:)项断了下来,
:PMODLE
帮助对话框出来了,点击确定,回到了TRW我看了看没有CMP,JNZ等语句,按F12->F8
回到了上一个调用处,呵呵,终于找到地方了:
:0042EF62 55                      push ebp
:0042EF63 8BEC                    mov ebp, esp
:0042EF65 81C400FFFFFF            add esp, FFFFFF00

* Possible Ref to Menu: MenuID_03E6, Item: "苞?(N)   Alt+Ctrl+N"
                                  |
:0042EF6B 3D419C0000              cmp eax, 00009C41 //是否是40001*****改成CALL 400300
:0042EF70 750D                    jne 0042EF7F                 //不是就转到下边一段
:0042EF72 FF7508                  push [ebp+08]
:0042EF75 E88FAAFFFF              call 00429A09
:0042EF7A E932040000              jmp 0042F3B1          //转到返回

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042EF70(C)
|

* Possible Ref to Menu: MenuID_03E6, Item: "S"
                                  |
:0042EF7F 3D429C0000              cmp eax, 00009C42      //从上边一段跳过来的
:0042EF84 750C                    jne 0042EF92
:0042EF86 6A00                    push 00000000
:0042EF88 E838ECFEFF              call 0041DBC5
:0042EF8D E91F040000              jmp 0042F3B1

所以我们在400300处应该写上

:CMP EAX,9C77      //我定义的菜单ID是40055,16进制就是9C77
:JNE 0040032A  //
;PUSH 5                    //SW_SHOW
;PUSH 0
;PUSH 0
;PUSH 440F3E    //文件地址
;PUSH 400390      //"OPEN" 的地址
;PUSH O
;CALL ShellExecuteA
:JMP 0042F3B1
0040032A:CMP EAX,9C41
:RET

把上边的那句3D419C0000  cmp eax, 00009C41
改成:CALL 00400300
然后吧400390改成"OPEN"
一切OK,
打开RADASM然后打开一工程(事先把ASM与INC文件的默认打开方式为EDITPLUS)
先双击一个文件(只有双击后地址才会出现),然后右键"用外部编辑器打开"
果然调用EDITPLUS打开了

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): pediy

·上一篇: 使用 Idag 修改字体全过程,兼谈 Idag 使用方法 ·下一篇: Alchemy Catalyst 汉化教程

· 版权申明: 本文引自《汉化教学》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《汉化教学》[ 作者: 雅枫],如需转载请直接联系原始作者,并请注明原始出处。

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

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