轩辕春秋文化论坛 » 曹操传MOD制作交流 » OB中如何选择代码跳转起始位置?


2010-2-11 05:06 武骧金星
OB中如何选择代码跳转起始位置?

在EXE修改中经常需要将代码写在空白处,因此就需要有一条跳转命令。

比如说,GODTYPE大人在[url]http://www.xycq.net/forum/viewthread.php?tid=194501[/url]中提到先手攻击的代码,一开始的跳转位置是:

0043AC2F   >-E9 D4200500    JMP 0048CD08

雪芸郡主在[url]http://www.xycq.net/forum/thread-82183-1-2.html[/url]中提到主动连击的代码,在将3A设置为空属性后,一开始的跳转位置是:

00405D15   E9 B9000800   JMP 00485DD3

虽然我知道跳转目标位置(0048CD08,00485DD3)都是空白,可以添加代码,但是却不明白是如何选择跳转起始位置,也就是不明白为什么在这个位置写代码……

能不能请前辈指教一下?谢谢。

2010-2-11 08:07 godtype
:hz1015:因为跳转出来的位置没有其他函数使用,可以随心所欲。
至于如何选择,经验问题,多改就会了。主要是找一大段连续的00,其次是找90(NOP)或者CC(INT3),其中用90出错的可能性会比较大,要看前后关系,CC的话,连续量不多。
如果第一个区段的空白位置确实不够用,可以考虑许子将教学的主代码和文字代码,其中主代码从00433359开始(结束点自己查),在不用教学的前提下,有相当多的空白位置。
除此之外就是扩展EXE和精简原来的函数,不过都要有一定的能力,参考一下其他帖,不详细说了,注意扩展EXE会影响对操作系统的兼容性(这个是我问别人才知道的)。

2010-2-11 10:42 武骧金星
啊,我的意思不是这样的……

比如说先手攻击的跳转是:0043AC2F   >-E9 D4200500    JMP 0048CD08

在原版EKD5.EXE中,0043AC2F处的代码为:

0043AC2F      8A45 F8       MOV AL,BYTE PTR SS:[EBP-8]
0043AC32      50            PUSH EAX
0043AC33      8B4D F0       MOV ECX,DWORD PTR SS:[EBP-10]

我是不明白为什么认为这三行代码是无关紧要,可以覆盖的……

2010-2-11 10:52 godtype
0048CD34   8B45 F8          MOV EAX,DWORD PTR SS:[EBP-8]
0048CD37   50               PUSH EAX
0048CD38   8B4D F0          MOV ECX,DWORD PTR SS:[EBP-10]
0048CD3B  -E9 F6DEFAFF      JMP 0043AC36

看清楚一点,已经在后面补回来了,只不过将MOV AL,BYTE PTR SS:[EBP-8]改成了 MOV EAX,DWORD PTR SS:[EBP-8],不影响。

2010-2-11 10:58 武骧金星
哦,非常感谢,我确实没有特别仔细看代码……

果然还是能力不足哇,吃个智力果好了……

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.