如何给外部程序添打补丁,添加一个菜单项,并能调用 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接改内存????外部程序是delphi 写的吗? 如果是的话,估计...... 我要修改微软的 VSS 添加一些功能进去,我想添加个菜单,也不知道有没有高手给指明前进的道路。 如果是简单的showmessage之类功能可以做~ 复杂了就不知道了~ 分几个步骤完成:1. 用 resource hacker 修改菜单,然后就得到菜单了,并且分配给菜单的ID(也就是菜单编号),是唯一的,不能和其它资源编号相同,一般就是在原有菜单最大ID基础上加1就行了.2.用OD载入程序,然后在里面找出类似以下的代码.switch(菜单ID){ case 菜单1:处理函数1();break; case 菜单2:处理函数2();break;.... case 菜单n:处理函数n();break;}编译成汇编代码如下:cmp 菜单ID,菜单1je 处理函数1jmp BACKcmp 菜单ID,菜单2je 处理函数1jmp BACK....cmp 菜单ID,菜单nje 处理函数njmp BACKBACK:ret这里假设你的菜单ID为n+1,然后就把上面的代码修改为:cmp 菜单ID,菜单1jmp mylabel 'je 处理函数1 这个被删掉,这里是直接跳到我们的地方去执行一段代码jmp LABEL1LABEL2:cmp 菜单ID,菜单2je 处理函数1jmp LABEL1....cmp 菜单ID,菜单nje 处理函数njmp LABEL1LABEL1:ret这里是我们添加的代码,可以用OD在进程空间里找一段空的地方添加这些代码进来,直接修改就行了.mylabel:je 处理函数1 '跳到这里之后,还可以继续使用上面判断的结果,如果是菜单1,就处理它cmp 菜单ID,菜单n+1 '到这里不管上面有没有执行,都判断是不是我们添加的菜单ID,je 处理函数n+1 '如果是,就处理它jmp LABEL2 '因为这段代码是我们添加进来的,所以我们一定要跳回去,所以是LABEL2如果你还有不明白的,可以到这里看更详细的教程.http://bbs.pediy.com/showthread.php?threadid=30623说得这么辛苦,LZ可以给分了吧. 厄,可以Reverse,不管什么程序都可以。不过要你看的功底了,也不是很难。修改Exe文件,学会了当文本文件来修改都行。 [請高手出招]:如何最高效地取得遠程網頁部分源碼 用hook检测控件的内容是否发生改变,该怎么做? 关于delphi字符串取值的问题! 求最快的截屏函数!最好是 50ms 之内! UDP的问题,请指教!!!! ★★如何让一个窗体永远在最前面显示? 向大家求助,Delphi不用dll如何转向程序目标IP地址 谁能给我一个delphi6读取xml格式的INI文件的例程 如何定义一个数集接口?(ActiveX) Delphi高手们请问你们一般做数据库应用时一般用的是什么数据库???? DELPHI 串口取JPEG格式的图片 多级权限 用户表 角色表 权限表的问题,请帮忙
外部程序是delphi 写的吗? 如果是的话,估计......
复杂了就不知道了~
1. 用 resource hacker 修改菜单,然后就得到菜单了,并且分配给菜单的ID(也就是菜单编号),是唯一的,不能和其它资源编号相同,一般就是在原有菜单最大ID基础上加1就行了.
2.用OD载入程序,然后在里面找出类似以下的代码.
switch(菜单ID)
{
case 菜单1:处理函数1();break;
case 菜单2:处理函数2();break;
....
case 菜单n:处理函数n();break;
}
编译成汇编代码如下:
cmp 菜单ID,菜单1
je 处理函数1
jmp BACK
cmp 菜单ID,菜单2
je 处理函数1
jmp BACK
....
cmp 菜单ID,菜单n
je 处理函数n
jmp BACKBACK:
ret
这里假设你的菜单ID为n+1,然后就把上面的代码修改为:
cmp 菜单ID,菜单1
jmp mylabel 'je 处理函数1 这个被删掉,这里是直接跳到我们的地方去执行一段代码
jmp LABEL1
LABEL2:
cmp 菜单ID,菜单2
je 处理函数1
jmp LABEL1
....
cmp 菜单ID,菜单n
je 处理函数n
jmp LABEL1LABEL1:
ret
这里是我们添加的代码,可以用OD在进程空间里找一段空的地方添加这些代码进来,直接修改就行了.
mylabel:
je 处理函数1 '跳到这里之后,还可以继续使用上面判断的结果,如果是菜单1,就处理它
cmp 菜单ID,菜单n+1 '到这里不管上面有没有执行,都判断是不是我们添加的菜单ID,
je 处理函数n+1 '如果是,就处理它
jmp LABEL2 '因为这段代码是我们添加进来的,所以我们一定要跳回去,所以是LABEL2
如果你还有不明白的,可以到这里看更详细的教程.
http://bbs.pediy.com/showthread.php?threadid=30623说得这么辛苦,LZ可以给分了吧.
修改Exe文件,学会了当文本文件来修改都行。