Re All:
单就此帖的内容而言,确实是很有新意的。因为有很多人知道这么能用,但是想不到到这么用的。只是楼主的最后一段话,实在有欠思量,触犯众怒自是难免的了。
就楼主最后的问题来看,我觉得“终极战士”兄的思路是正确的,只不过实现方法上有欠考虑,对于exe文件或者其他二进制文件的编辑任务,切忌不可使用edit之类的文本编辑器,而必须使用专门的十六进制编辑器。
而依照楼主的思路,似乎此题也需用dos自带的命令,那么只有用debug了。下面给出我的方案,为了方案的简化,有些细节问题予以忽略。
注意:
以下出现的数字均为十六进制数,计算时也以此为准;
方括弧中的内容应该是个十六进制数值,在这里根据其表示的意义来加以命名,实际操作时需根据上下文替换成相应的值;
圆括弧中的内容为注释内容,实际操作时不应输入;
单就此帖的内容而言,确实是很有新意的。因为有很多人知道这么能用,但是想不到到这么用的。只是楼主的最后一段话,实在有欠思量,触犯众怒自是难免的了。
就楼主最后的问题来看,我觉得“终极战士”兄的思路是正确的,只不过实现方法上有欠考虑,对于exe文件或者其他二进制文件的编辑任务,切忌不可使用edit之类的文本编辑器,而必须使用专门的十六进制编辑器。
而依照楼主的思路,似乎此题也需用dos自带的命令,那么只有用debug了。下面给出我的方案,为了方案的简化,有些细节问题予以忽略。
注意:
以下出现的数字均为十六进制数,计算时也以此为准;
方括弧中的内容应该是个十六进制数值,在这里根据其表示的意义来加以命名,实际操作时需根据上下文替换成相应的值;
圆括弧中的内容为注释内容,实际操作时不应输入;
c:\windows>ren 3.exe 3.eee (修改程序的扩展名,避免debug对可执行程序的特殊处理)
c:\windows>debug 3.eee
-s 100 ffff "MZ" (在100至ffff范围内搜索MZ标志字)
: (显示匹配的地址)
:
.... (可能还会有一些)
-d (分别显示各个地址,根据显示内容确定第二程序的起始地址)
-d (此处假定在xxxx1处找到第二文件的起始地址Begin2)
-n 1.eee (创建文件1.eee)
-r cx (编辑文件长度)
CX (显示原文件3.eee的长度)
: (此处填入Begin2减去100后的值,即文件1.eee的长度)
-w (写入文件1.eee)
Writing bytes (显示写入的字节数)
-m ffff 100 (移动第二文件的内容到100起始处)
-h (用差值计算第二文件的长度)
(前面为和,后面为差,差即为第三文件减去第一文件的长度)
-n 2.eee (创建文件2.eee)
-r cx (编辑文件2.eee的长度)
CX (显示原文件1.eee的长度)
: (此处填入文件2.eee的长度)
-w (写入文件2.eee)
Writing bytes (显示写入的字节数)
-q (退出DEBUG)
c:\windows>ren 1.eee 1.exe (改回程序的扩展名)
c:\windows>ren 2.eee 2.exe
本帖最近评分记录
(共 3 条)
点击查看详情
| 评分人 | 分数 | 时间 |
|---|---|---|
| ngd | +1 | 2008-01-12 13:53 |
| regvip2008 | +2 | 2008-04-26 09:57 |
| sl543001 | +8 | 2010-08-15 23:31 |
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!


