标题: 如何使用Ollydbg修改曹操传引擎, 欢迎学习,欢迎指导,谢绝砖头,禁止灌水,谢绝转载。
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 11:33 资料 个人空间 短消息 只看该作者
如何使用Ollydbg修改曹操传引擎

写在前面的不必要的废话:
作为一个过来人,从只会UE和WINHEX修改到现在可以使用Ollydbg来修改曹操传系列的引擎(Ekd5.exe),所以很明白新人和不懂汇编者的心情。所以现在写一篇教程,供新人和不懂汇编者学习如果使用Ollydbg修改曹操传的引擎。其他懂汇编者或者其他前辈高人看完后欢迎指出不足之处,勿扔砖头。

部分内容节选自以下有关Ollydbg的教程:
《MOD制作基本工具用途及其使用方法图文实例,入门教程》
《解读KOEI曹操传代码》
《乱侃Exe文件的修改》
《曹操传exe部分函数功能》
《曹操传修改的实用汇总》
另有阿斌所写的《OllyDBG基礎教程》两篇,因为权限问题,不提供链接。

特别声明:
1、教程中能够不采用汇编术语的地方我会尽量用易懂的文字来代替。
2、此教程只适合修改曹操传系列的引擎(Ekd5.exe),并不代表可以适用于其他游戏,也不代表看完本教程者就学会了汇编。
3、谢绝转载。


[ 本帖最后由 godtype 于 2020-5-8 09:21 编辑 ]

本帖最近评分记录
yanguodong 2009-8-14 12:25 +280 好帖奖励


顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 11:34 资料 个人空间 短消息 只看该作者
第一部分 Ollydbg的基本使用方法

一、打开Ollydbg,然后按“F3”或点击菜单中的文件(F)->打开(O),选择要修改的EXE文件,确定。
出来的界面如下图,其中分开四个区域:

其中反汇编窗口是主要用的,显示程序中的反汇编代码,也是修改的主要工作窗口。
数据窗口是显示内存或文件中的内容,我比较少看,主要也只是看比如某个兵种的名称在哪个位置之类的。
寄存器窗口显示寄存器的内容,堆栈窗口是显示当前线程的堆栈,这两个窗口都是需要调试的时候才用到的。

在反汇编窗口中,从左往右数,第一列是反汇编地址,第二列是反汇编代码转成的机器码(即UE中看到的代码),第三列就是反汇编代码,第四列可以理解为注释,可以自己加上去方便以后查看。

二、一些经常用的快捷键:
F9:运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。
F2:设置断点,只要在光标定位的位置按F2键即可,再按一次F2键则会删除断点,如果设置了大量的断点,可以按Alt+B打开断点窗口,点右键全部关闭。
F8:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。
F7:单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。
Ctrl+G:转到输入的地址。
Ctrl+F:查找命令。
Ctrl+B:查找字符。
Ctrl+L:查找下一个,配合Ctrl+F或Ctrl+B使用。
Ctrl+F2:打开最后一次打开的EXE文件(当前打开的文件也算最后一次打开,即相当于重启文件)。
Ctrl+E:修改当前光标定位的机器码字符。
Alt+F2:关闭当前打开的EXE文件。
Alt+X:关闭Ollydbg。
小键盘“-”号:后退到上一次操作的地方。
小键盘“+”号:"-"号的逆操作。


三、修改代码的操作以及保存修改后的代码:(这里的操作暂不配图,如有需要另行后补)
先转到需要修改的代码所在地址,然后有以下几种方法进行修改操作:
1、用MOUSE双击选定的该行代码,然后粘帖之前复制好的代码;
2、或者单击空格键,然后粘帖之前复制好的代码;
3、如果是手动输入的可以直接打字上去,无需双击MOUSE或单击空格。

修改完毕后,点MOUSE的右键,选择“复制到可执行文件”->点击“*选择部分”或“全部修正”。其中“*选择部分”只保存选定好的部分,而“全部修正”只限在第一个区段中使用,可以将第一个区段中所有已修改的内容全部保存,而且保存的时候,只能保存同一个区段内的内容,不能跨区段保存,所以修改的时候要分开每一个区段来修改,每次保存之后要重新打开EXE再来修改其他内容。
(有关区段的知识,请参考:http://www.xycq.online/forum/thread-193425-1-2.html

[ 本帖最后由 godtype 于 2020-5-8 09:29 编辑 ]


顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 11:35 资料 个人空间 短消息 只看该作者
第二部分 与曹操传修改有关的简单汇编知识

一、寄存器
在寄存器窗口中,最上方显示了数个寄存器的名称,以及在调试的时候可以看到它们运行过程中存放的数据。
其中EAX,ECX,EDX和EBX是通用寄存器,也是经常用到的,用于各种计算的寄存器。
EBP和ESP一般用在子程序(或者称为函数)的开始和结束部分,这两个不能乱用,以后会讲解具体用法。
EDI和ESI也不能乱用,除非原来的代码中用到,否则不要使用。

实际上用得最多就只是EAX、ECX、EDX、EBX,他们具体又会分成AX、AH、AL、CX、CH、CL、DX、DH、DL、BX、BH、BL,看图:

图中以EAX为例,其中橙色为EAX,占用4个字节,红色是AX,占用2个字节,绿色是AH,占用1个字节,蓝色是AL,占用1个字节。图的下面部分就是用数据进行举例,不多说了。

二、子程序(函数)

QUOTE:
PUSH EBP  ——将EBP压入堆栈,属于固定格式
MOV EBP,ESP  ——将ESP的值移入EBP,属于固定格式
SUB ESP,X  或  PUSH ECX  ——空出暂存空间
============
==正式内容==
============
MOV ESP,EBP  ——将EBP的值移入ESP,属于固定格式
POP EBP  ——将EBP从堆栈中取出,属于固定格式
RETN  或  RETN X  ——结束返回原来调用此子程序的地方

子程序使用CALL指令进行调用,当光标停在CALL ****这一行的时候,可以按回车键进入该子程序进行查看,而大部分子程序都采用上面的格式。

1、标明“属于固定格式”的指令不需要太明白它的实际意义,

2、“空出暂存空间”是必须的,因为只靠几个通用寄存器,是完成不了大量的计算,所以就要空出一定量的空间,将暂时不需要计算的数据保存起来,换句话就是新引擎剧本指令中有到的整形变量。
SUB ESP,X表示空出(X÷4)个空间,每4个字节一个空间,[EBP-X]就是表示第(X÷4)个空间,比如SUB ESP,0C就表示空出三个空间,[EBP-C]就是其中第三个空间。
PUSH ECX相当于SUB ESP,4,只空出一个空间(其实就是一种偷懒省字节的表现。)
也可以跳过这一步,有此子程序中只用到一两个通用寄存器,计算量少,不需要暂时性的保存数据,就可以不用这一步。

3、RETN 或 RETN X的具体用法。
寄存器中的数据不会因为调用了子程序就改变,所以可以用作子程序的输入数据,但是如果有大量的输入数据,只靠几个通用寄存器,也是完成不了输入的,所以就要在调用子程序之前,通过PUSH指令,对其它输入数据进行压入堆栈的操作,例如:
PUSH EDX(参数3)
PUSH ECX(参数2)
PUSH EAX(参数1)
CALL 4001
ADD ESP,0C
这个时候就有3个数据输入进子程序4001里面,调用4001之后,参数1是[EBP+8],参数2是[EBP+C],参数3是[EBP+10],注意是从+8开始,而不是从+4开始,而且最后一个PUSH的才是第一个参数。
当没有参数输入到子程序的时候,结束返回用RETN就可以了,但是如果有数量不等的参数输入到子程序的时候,结束返回就不能只用RETN,要用RETN X了。这是由于输入参数是用PUSH的,相当于在前一个程序中增加了X个暂存空间,所以返回的时候就要将增加了的空间删去,在一般情况下,输入了3个参数,就要用RETN 0C,这样就可以了,但是有些子程序是用RETN的,所以回到原来的程序,就要加上一条ADD ESP,X了。

4、可以自行新写一些内容作为自定义函数,尤其是一些大量运用的组合指令,这样可以方便以后的修改,还能够在原来的程序中节省一定量的空间写新的代码。这个做法就是参考了STAR175的新引擎之后大量运用。

三、常用指令
1、MOV
格式为 MOV 参数1,参数2 ;表示将参数2的数据移入参数1中,也可以理解为参数1=参数2。
具体有以下几种用法:
1)MOV EAX,1 或 MOV AL,1
最简单的,EAX=00 00 00 01;如果是MOV AL,1,则只是AL部分等于1,假如原来EAX=12345678,MOV AL,1之后,EAX=12345601。

2)MOV EAX,ECX
即EAX=ECX

3)
MOV EAX,DWORD PTR SS:[EBP-4]
MOV DWORD PTR SS:[EBP-4],EAX
MOV EAX,DWORD PTR DS:[EBP-4]
MOV DWORD PTR DS:[EBP-4],EAX
第一条,表示EAX等于[EBP-4](即第一个暂存空间)的数值,假如[EBP-4]里面是12345678,则EAX=12345678;而第二条就是第一条的相反操作,不作解释。
第三条,表示EAX等于以[EBP-4]的数值为所在地址中的数值,假如[EBP-4]里面是00410000,而地址00410000的数据是00 00 00 01,则EAX=00 00 00 01;同样第四条是第三的相反操作,不作解释。
这四条都是DWORD型,即4字节数据的移动,但不是所有数据都是4 字节的,还有很多都是2字节和1字节,这时就要改用其他类型,例如MOV AL,BYTE PTR SS:[EBP-4]是1字节用的,MOV AX,WORD PTR SS:[EBP-4]就是2字节用的。

2、逻辑运算类
1)AND
术语是与操作指令,实际应用是将4字节寄存器中不需要的字节进行“00”操作,例如
AND EAX,0FF 表示将EAX中的数据,除了AL保留起来,其他全部置为00,假如EAX=12345678,则操作后EAX=00000078,且最大不会超过000000FF;

这里顺便说明一下,包括其他的指令修改在内,对于超过7F的数值,在实际输入的时候,要在前面加一个“零”,比如想输入200,不能只输入C8,要输入0C8

2)XOR
术语是异或操作指令,实际应用是清空某寄存器,例如XOR EAX,EAX,相当于MOV EAX,0,即EAX=00000000

3)TEST
测试指令,一般用于CALL 407A09(测试某武将是否带有指定特效的装备)、概率测试、随机数测试等函数之后,表达式为TEST EAX,EAX ,后面必定跟着JE或JNZ的跳转指令,JE表示EAX=0(没有装备或发生)时跳转,JNZ则相反。

4)OR、NOT
分别是或操作指令和取反指令,因为我没有用过,所以不作解释。

3、CMP和条件转移(即跳转)
格式为CMP 参数1,参数2,以参数1为目标物对参数2进行相互比较,比较的结果根据后面的各种条件转移来转移跳转。具体常用的条件转移如下:
JE 或 JZ:两参数相同就跳转,否则接下一行指令
JNZ 或 JNE:不相同才跳转
JA 或 JNBE:大于跳转
JAE 或 JNB:大于等于跳转
JB 或 JNAE:小于跳转
JBE 或 JNA:小于等于跳转
以上四条,测试无符号整数运算的结果
JG 或 JNLE:大于跳转
JGE 或 JNL:大于等于跳转
JL 或 JNGE:小于跳转
JLE 或 JNG:小于等于跳转
以上四条,测试带符号整数运算的结果

除了条件转移还有最重要的一条是JMP:无条件跳转。

所有的转移指令跟CALL指令一样可以按回车来跳到目标位置进行查看。

4、计算类指令
1)INC、DEC
前者是加1指令,后者是减1指令,不多加不多减,只有1。

2)ADD
加法指令,例如ADD EAX,1就是EAX的数值+00000001,ADD EAX,ECX就是EAX = EAX的数值 + ECX的数值

3)SUB
减法指令,使用方法跟ADD一样

4)MUL、IMUL
都是乘法指令,具体用法不同。
前者是以EAX的值直接乘以参数,比如MUL ECX表示EAX = EAX的数值 * ECX的数值
后者是将所有参数进行相乘,比如IMUL ECX,ECX,19表示 ECX = ECX的数值 * 19H

5)DIV、IDIV
前者是无符号除法,后者是整数除法。
前者跟MUL相似,拿EAX的数值除以参数,但是得出来的商存放在EAX,余数存放在EDX里面,所以使用前通常用XOR EDX,EDX先清空EDX,举例:
MOV EAX,96
MOV ECX,64
XOR EDX,EDX
DIV ECX
得出的结果是,EAX=00000001,EDX=00000032
后者没有经常用,所以不作解释。

6)SHL、SAL
逻辑左移和算术左移指令,这两条不用术语解释,用实际应用来说明,以SHL EAX,1为例,实际效果就是EAX * 2,所以可以将SHL EAX,X理解为EAX乘以2的X次方。

7)SHR、SAR
逻辑右移和算术右移指令,与上面的左移同理。

5、NOP
无作用或称为自动跳过这一行代码 (用UE打开编辑exe文件时你看到90,等同于汇编语言语句nop)

最后,其他指令由于较少接触,所以都不作解释。
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 11:36 资料 个人空间 短消息 只看该作者
第三部分 曹操传修改相关知识

一、内存
内存是非常重要的,在运行过程中程序对数据的读取都是从内存中读出并加以计算、修改,好借data.e5里面的数据就是在程序运行的时候就按一定的格式首先存入到内存的指定位置中。
在岱瀛的《解读KOEI曹操传代码》的最后面就有提到常用的一些内存地址,还有ssbye的《曹操传修改的实用汇总》里面有更多的内存资料,请详细阅读。我在这里只解释几个常用的。
=====================
1、4927F0
从4927F0开始存放了相当多的物理攻击的战斗信息,在程序中常有这样一句:MOV ECX,4927F0,而它的后面就有很多[ECX+1]、[ECX+4]……,具体的内容是:
4927F0+0 发动攻击的武将的战场编号(战场编号00-0E是我军,0F-22是友军,23-72是敌军)(BYTE)
4927F0+1 当前被攻击武将的战场编号(BYTE)
4927F0+4 发动攻击的武将的Data编号(512人的data就是000-1FF,1024人的data就是000-3FF)(DWORD)
4927F0+8 发动攻击的武将Data内存地址(DWORD)
4927F0+C 发动攻击的武将战场内存地址(DWORD)
4927F0+10 开始存放所有被攻击武将的战场编号,一共是73H*1(所有被攻击武将,指的就是穿透攻击中其他受影响的武将)(BYTE)
4927F0+84 开始是全体被攻击武将按被攻击顺序存放HP伤害值,一共是73H*4(DWORD)
4927F0+254 开始是全体被攻击武将按被攻击顺序存放MP伤害值,一共是73H*4(DWORD)
4927F0+424 穿透范围(BYTE)
4927F0+425和426 当前被攻击武将的坐标(BYTE)
4927F0+428 发动攻击的武将所得到的个人经验(DWORD)
4927F0+42C 发动攻击的武将所得到的武器经验(DWORD)
4927F0+430 开始是全体被攻击武将所得到的防具经验,一共是73H*4(DWORD)
4927F0+600 是否AI攻击
4927F0+604 是否发生爆击(DWORD)
4927F0+608 是否连击(BYTE)
4927F0+60C 是人物挨打动作播放时位移抖动的横坐标(DWORD)
4927F0+610 是人物挨打动作播放时位移抖动的纵坐标(DWORD)
4927F0+614 通常直接用492E04使用,是反击以及反击后反击的标志(DWORD)
=====================
2、497AF8
跟4927F0相类似,497AF8是存放使用策略的信息,具体的内容是:
497AF8+0 是策略编号(BYTE)
497AF8+1 是使用策略的武将的战场序号(BYTE)
497AF8+4 是使用策略的武将的DATA内存地址(DWORD)
497AF8+8 是使用策略的武将的战场内存地址(DWORD)
497AF8+C 是当前被策略攻击或被策略恢复、提升武将的战场序号(BYTE)
497AF8+D 开始是全体被策略攻击或被策略恢复、提升武将的战场序号,一共是73H*1(BYTE)
497AF8+84 开始是全体被策略攻击武将按被攻击顺序存放伤害值,一共是73H*4(DWORD)
497AF8+254 是策略效果标识(BYTE)
497AF8+255 开始是全体被策略攻击武将按被攻击顺序存放实际策略效果标识,一共是73H*1(这个在一般情况下是统一跟+254的标识值一样,但是特殊的多组合效果策略就会用到不同的效果标识,例如八阵和玄武)
497AF8+2C9和+2CA 分别是使用的策略的攻击范围和穿透范围(BYTE)
497AF8+2D0 是使用策略的武将所得到的个人经验(DWORD)
497AF8+2D4 是使用策略的武将所得到的武器经验(DWORD)
497AF8+2D8 开始是全体被策略攻击武将所得到的防具经验,一共是73H*4(DWORD)
497AF8+4A8 (暂未详细分析,只有0和1两个值,对应的是使用策略的武将是否可以控制。BYTE)
497AF8+4AC 最终输出用,表示是否成功使用策略,0不成功并返回选择策略界面,1成功并结束武将行动(DWORD)
497AF8+4B0 策略动画相关
因为与4927F0相类似,所以不多写了,注意如果是使用对已方的策略,攻击武将就是使用策略的武将,被攻击武将就是目标武将。
=====================
3、4B2C50
战场内存地址,按每个战场编号24H个字节排列。
在程序中常见这样的两条指令:
IMUL ECX,ECX,24
ADD ECX,004B2C50
就是根据4927F0中攻防双方的战场编号,得出战场内存地址。攻击方可以直接从[4927F0+C]中读出,而被攻击方就要从[4927F0+1]中读出战场编号再加上上面这两条指令才能读出战场内存地址。

而24H个字节具体的内容如下(没有标出为未知):
00-03:武将的Data序号
04:是战场形象编号
05:属于哪一方,00代表我军,01是友军,大于等于02是敌军
06:战场横坐标
07:战场纵坐标
0B:AI的行动顺序
0C:判断武将是否可见,01不可见,02可见,03撤退
0D:叠加数值。00是未行动,02与04同时存在就是已行动,08表示S形象的左右翻转
0E:是否能被玩家直接控制,07表示可控
0F:表示人物朝向,数值是0(上),1(右),2(下),3(左)
10-13:HPcur
14:MPcur
18:攻击状态,03为正常状态,大于03为提升,小于03为衰弱
19:防御状态
1A:精神状态
1B:爆发状态
1C:士气状态
1D:移动状态
1E:表示人物健康状态:00和01代表正常,02和03是麻痹,04和05是禁咒,06和07是麻痹加禁咒,08和09是混乱,0a和0b是麻痹加混乱,0c和0d是禁咒加混乱,0e和0f是混乱加麻痹加禁咒.10和11是中毒,12和13是麻痹加中毒,14和15是禁咒加中毒,16和17是麻痹加禁咒加中毒,18和19是混乱加中毒,1a和1b是麻痹加混乱加中毒,1c和1d是禁咒加混乱加中毒,1e和1f是禁咒加麻痹加混乱加中毒

08-0A与AI行动有关:

QUOTE:
原帖由 star175 于 2009-8-10 12:07 发表
4B2C50 +8 和AI行动方针有关
                +8                      +9  +A        +E(如果为7就是可控)
被动出击        FF                                        3
主动出击        FF                                        1
坚守原地        FF                                        2
攻击我将    要攻击武将的战场编号                         0
到指定点        FF                      X   Y            0
跟随武将    要跟随武将的战场编号                         4
逃到指定点      FF                     X   Y              4

=====================
4、4A1B68 或 0D60000
武将DATA内存。按每个武将的data编号48H个字节排列。其中512人data是从4A1B68开始,而1024人data就从0D60000开始,而STAR175的5.2版引擎开始采用了一种新方法,由系统自动安排DATA内存的起始位置。
在程序中常见这样的两条指令:
IMUL ECX,ECX,48
ADD ECX,004A1B68 或 ADD ECX,0D60000
就是根据武将的DATA编号(大部分情况下都是从战场内存地址的00-03中取出来)得出DATA内存地址。

而48H个字节具体的内容如下(没有标出为未知):
00-01:表示武将DATA编号,其中01位置为1X。比如0号武将就是00 10 ,1号武将就是01 10
02-03:R剧本形象代号
04-05:武将头像地址
08-0F:武将姓名(8字节,4个中文)
10:保留给武将姓名的结束符?
11-12:攻击力
13-14:防御力
15-16:精神力
17-18:爆发力
19-1A:士气
1C-1F:HP
20:MP
21-25:武统智敏运
26:致命一击台词类型
27:出阵场数
29:撤退场数
2A:是否我军,00是我军,FF不是我军
2B:兵种
2C:武将等级
2D:经验值
2E-30:武器编号、等级、经验
31-33:防具编号、等级、经验
34:辅助品
37-48:R剧本点击该人物是显示的名字
上面的是将五围从单字节扩展到双字节后(即突破255上限)的内容,如果是原版未突破255的,攻防精爆士的位置是15-19。
=====================
5、4B0770
也是常见的:MOV ECX,4B0770,从这里开始存放的内容也很重要,基本上都是存档中内容。
挑选几个简单说一下:
+6,即4B0776是章编号,0号武将的头像从第3章(章编号2)开始会从face.e5的第1-4张图片转用第5-8张图片,就是从这里判断的,当然具体的程序代码在其他地方。
C-F,即4B077C—4B077F是金钱的地址
+12,即4B0782是忠奸度
+13开始,即4B0783开始,每三位是一种武器或者防具或者辅助,一直到004B09DA为止。
其他的可以看岱瀛的帖,不多说了。
=====================
6、其他一些从DATA中导入的内存地址
1)物品属性(68H个)
IMUL ECX,ECX,19
ADD ECX,004A1140
2)部队属性(35H个)
IMUL ECX,ECX,1B
ADD ECX,004ABFA0
3)地形资料(1BH个)
IMUL ECX,ECX,3C
ADD ECX,004AE4E0
4)商店资料(3AH个 或 7FH个)
IMUL ECX,ECX,28
ADD ECX,004AEB68 或 ADD ECX,0D72000
商店有两种,同样是因为1024DATA的原因
5)策略属性(44H个)
IMUL ECX,ECX,46
ADD ECX,004AF4C0
以上的具体内容请参阅ssbye的《曹操传修改的实用汇总》
=====================
7、497750
这个比较冷门,但是假如要修改消耗品,就要用到。基本用法与4927F0相似。MOV ECX,497750
[ECX]消耗品编号
[ECX+1]消耗品效果(3F-4C,HP恢复、MP恢复……)
[ECX+2]使用者战场编号(使用者就是点击道具的那个人)
[ECX+3]受用者战场编号(受用者就是道具用在谁的身上)
[ECX+4]使用者战场内存地址
[ECX+8]受用者战场内存地址
[ECX+C]使用者DATA内存地址
[ECX+10]受用者DATA内存地址
[ECX+14]道具DATA内存地址(4A1140+57*68开始,57就是第一个消耗品的编号)
[ECX+18]道具使用范围
[ECX+1C]结束使用用,表示是否成功使用道具,0不成功并返回选择界面,1成功并扣除道具数量后结束武将行动
想开发新类型的消耗品,就必须明白以上的几个关系。
=====================
=====================
二、常用到的指令以及组合
1、武将身上是否有某特效的装备
新人最喜欢改的东西。用到的子程序就是407A09,如果该特效还要从DATA中设置效果值,后面还需要一条407AF2读取效果值。这两条子程序都需要一个ECX值和一个参数输入,这个参数就是特效号,未扩展过的就是12-3E,而ECX的值是该武将的DATA内存地址,注意如果该特效是攻击方用的,就要先从攻击武将的战场内存中取出攻击武将的DATA编号,然后再转成攻击武将的DATA内存地址输入到ECX中,最后才能接相关的子程序。具体的格式如下:
MOV ECX,DWORD PTR SS:[EBP-4]  ——这里假设[EBP-4]中已经存放了武将的DATA内存地址
PUSH 12  ——12就是特效号
CALL 407A09  ——执行判断是否带有12特效号的装备
TEST EAX,EAX
JE ****  ——根据上一条TEST,这里表示没有12特效号的装备就跳到下一项内容中,如果用JNZ就表示带有12特效号的装备就跳到下一项内容中。后面接着的者是否则的内容。

这个时候如果是不需要在DATA中设置效果值的特效,就从这里开始写效果代码;如果需要在DATA中设置效果值,就加上以下指令:
MOV ECX,DWORD PTR SS:[EBP-4]  ——同样需要将武将的DATA内存地址放进ECX中
PUSH 12  ——特效号必须作为输入参数1输入进去
CALL 407AF2  ——读取DATA效果值(当然这个值其实一早已经存进从4A1140开始的内存中,程序只是从内存中通过计算后,取出来而已)
AND EAX,0FF  ——这个可用可不用,因为407AF2出来的值只是AL的值,所以有的时候需要零扩展一下,将EAX中除了AL,其他位置全清零。
后面同样是开始写效果代码。

2、获取武将的兵种
主要有406610、41DF70、4077D0、43B470,前两个是获取武将的兵种,后两个是获取武将的大兵种类。
406610与41DF70的区别是,406610直接从输入的ECX(武将的DATA内存地址)中取出对应+2B位置里面的代码,而41DF70是从输入的ECX(武将的战场内存地址)中取出武将的DATA编号,然后再转成武将的DATA内存地址,最后调用一次406610取出兵种代码。两者具体的原版代码如下:
00406610  /$ 55             PUSH EBP
00406611  |. 8BEC           MOV EBP,ESP
00406613  |. 51             PUSH ECX
00406614  |. 894D FC        MOV DWORD PTR SS:[EBP-4],ECX
00406617  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
0040661A  |. 8A40 2B        MOV AL,BYTE PTR DS:[EAX+2B]
0040661D  |. 8BE5           MOV ESP,EBP
0040661F  |. 5D             POP EBP
00406620  \. C3             RETN

0041DF70  /$ 55             PUSH EBP
0041DF71  |. 8BEC           MOV EBP,ESP
0041DF73  |. 51             PUSH ECX
0041DF74  |. 894D FC        MOV DWORD PTR SS:[EBP-4],ECX
0041DF77  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
0041DF7A  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]
0041DF7C  |. 6BC9 48        IMUL ECX,ECX,48
0041DF7F  |. 81C1 681B4A00  ADD ECX,004A1B68
0041DF85  |. E8 8686FEFF    CALL 00406610
0041DF8A  |. 8BE5           MOV ESP,EBP
0041DF8C  |. 5D             POP EBP
0041DF8D  \. C3             RETN

4077D0和43B470之间的关系也同样道理。

3、异常类攻击与概率测试
先看一段代码:
00405953  |. 6A 3C          |PUSH 3C
00405955  |. E8 D8A10700    |CALL 0047FB32
0040595A  |. 83C4 04        |ADD ESP,4
0040595D  |. 85C0           |TEST EAX,EAX
0040595F  |. 74 18          |JE SHORT 00405979
00405961  |. 6A 08          |PUSH 8
00405963  |. 8B45 F4        |MOV EAX,DWORD PTR SS:[EBP-C]
00405966  |. 33C9           |XOR ECX,ECX
00405968  |. 8A48 01        |MOV CL,BYTE PTR DS:[EAX+1]
0040596B  |. 6BC9 24        |IMUL ECX,ECX,24
0040596E  |. 81C1 502C4B00  |ADD ECX,004B2C50
00405974  |. E8 470D0000    |CALL 004066C0
以上是原版中,混乱攻击兵种的效果代码。其中47FB32是概率测试函数,需要输入一个参数作为需要测试概率,即是否有60%的机率发生(复习一下以前的知识,这里要用ADD ESP,4是因为47FB32的结尾是用RETN)。TEST是看这60%机率是否发生了,JE是没有发生就跳到下一项代码。这样概率测试就完成了,接下来这60%机率发生了,所以就要让被攻击的武将混乱,所以PUSH 8是4066C0的输入参数1,至于为什么是8?看前面内存部分4B2C50有关内容。这里的[EBP-C]存放的就是4927F0,所以[EAX+1]就是被攻击武将的战场编号,然后转成战场内存地址,调用4066C0,让被攻击武将添加上混乱的状态,完成。

4、其他主要的函数的用途,请看周大的《曹操传exe部分函数功能》

5、暂时想不到还有什么常用的,就先到此为止。

==============================
追加几条战场内存与DATA内存的算法

从战场内存地址计算DATA内存地址
MOV ECX,<战场内存地址>
MOV ECX,[ECX]
IMUL ECX,ECX,48
ADD ECX,4A1B68 <==要根据不同的引擎来实际改变

从DATA内存地址计算战场内存地址
1
MOV ECX,<DATA内存地址>
CALL 00477ADC
MOV CL,AL <==必须先加测试AL是否等于0FF,0FF表示不在战场必须跳过
AND ECX,0FF
IMUL ECX,ECX,24
ADD ECX,004B2C50

2
PUSH <DATA编号>
CALL 0043E4D6
ADD ESP,4
MOV CL,AL <==必须先加测试AL是否等于0FF,0FF表示不在战场必须跳过
AND ECX,0FF
IMUL ECX,ECX,24
ADD ECX,004B2C50

3
PUSH <DATA编号>
CALL 4796DC
ADD ESP,4
MOV ECX,EAX <==必须先加测试EAX是否等于0FFFF,0FFFF表示不在战场必须跳过
IMUL ECX,ECX,24
ADD ECX,004B2C50

[ 本帖最后由 godtype 于 2014-3-18 15:00 编辑 ]
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 11:38 资料 个人空间 短消息 只看该作者
第四部分 曹操传修改实例

一、根据已有的条件添加宝物或兵种特效
1、举一个最经典的例子:“主动连击”。

思路:因为原版是没有连击特效的,只有普通的连击率计算,所以就要从连击率这里入手修改,添加一个攻击方武将是否带有此特效的宝物(407A09),如果有连击率为100,没有就按连击率计算连击率。

先分析连击率计算的代码
00405CE6  /$ 55             PUSH EBP
00405CE7  |. 8BEC           MOV EBP,ESP
00405CE9  |. 83EC 0C        SUB ESP,0C   ——空出三个暂存空间
00405CEC  |. 894D F4        MOV DWORD PTR SS:[EBP-C],ECX   ——输入的ECX==4927F0,并保存在[EBP-C]即第三个暂存空间里面
00405CEF  |. 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]   ——将保存在[EBP-C]的4927F0存放在EAX里面
00405CF2  |. 8B48 0C        MOV ECX,DWORD PTR DS:[EAX+C]   ——再将4927F0+C这个内存地址里面的数据,即攻击方武将的战场内存地址存放在ECX里面
00405CF5  |. E8 37990300    CALL 0043F631   ——这条是取出武将爆发力的函数,输入的ECX必须是武将的战场内存地址,输出的EAX的数值包含了武将本身的数值 + 装备的数值 + 上升下降量
00405CFA  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX   ——将攻击方的总爆发力保存在[EBP-8]里面
00405CFD  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]   
00405D00  |. 33D2           XOR EDX,EDX
00405D02  |. 8A51 01        MOV DL,BYTE PTR DS:[ECX+1]   
00405D05  |. 8BCA           MOV ECX,EDX
00405D07  |. 6BC9 24        IMUL ECX,ECX,24
00405D0A  |. 81C1 502C4B00  ADD ECX,004B2C50   
00405D10  |. E8 1C990300    CALL 0043F631   
00405D15  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX   ——将被攻击方的总爆发力保存在[EBP-4]里面
00405D18  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]   ——将被攻击方的总爆发力从[EBP-4]里面取出,存放在EAX里面,并开始准备计算普通的连击率
00405D1B  |. 6BC0 03        IMUL EAX,EAX,3
00405D1E  |. 3945 F8        CMP DWORD PTR SS:[EBP-8],EAX
00405D21  |. 72 04          JB SHORT 00405D27
00405D23  |. B0 64          MOV AL,64
00405D25  |. EB 3E          JMP SHORT 00405D65
00405D27  |> 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
00405D2A  |. D1E1           SHL ECX,1
00405D2C  |. 394D F8        CMP DWORD PTR SS:[EBP-8],ECX
00405D2F  |. 72 17          JB SHORT 00405D48
00405D31  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
00405D34  |. D1E2           SHL EDX,1
00405D36  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
00405D39  |. 2BC2           SUB EAX,EDX
00405D3B  |. 6BC0 50        IMUL EAX,EAX,50
00405D3E  |. 33D2           XOR EDX,EDX
00405D40  |. F775 FC        DIV DWORD PTR SS:[EBP-4]
00405D43  |. 83C0 14        ADD EAX,14
00405D46  |. EB 1D          JMP SHORT 00405D65
00405D48  |> 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
00405D4B  |. 3B45 FC        CMP EAX,DWORD PTR SS:[EBP-4]
00405D4E  |. 72 13          JB SHORT 00405D63
00405D50  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
00405D53  |. 2B45 FC        SUB EAX,DWORD PTR SS:[EBP-4]
00405D56  |. 6BC0 12        IMUL EAX,EAX,12
00405D59  |. 33D2           XOR EDX,EDX
00405D5B  |. F775 FC        DIV DWORD PTR SS:[EBP-4]
00405D5E  |. 83C0 02        ADD EAX,2
00405D61  |. EB 02          JMP SHORT 00405D65
00405D63  |> B0 01          MOV AL,1
00405D65  |> 8BE5           MOV ESP,EBP
00405D67  |. 5D             POP EBP
00405D68  \. C3             RETN
上面只写出部分的分析,关于连击率的计算就不写出来了。
连击特效放在哪个位置都没有所谓,根据前辈们已写的代码,就决定在开始计算连击率之前加入新代码,用无条件跳转到空白位置来改写。由于指令JMP *** 占用五个字节,所以就要占用了00405D15  |. 8945 FC   MOV DWORD PTR SS:[EBP-4],EAX和00405D18  |. 8B45 FC   MOV EAX,DWORD PTR SS:[EBP-4]这两条指令的位置。以下是代码:

QUOTE:
《曹操传EXE修改详解》
原帖由 慕容雪芸 于 2006-1-10 10:16 发表
00405D15   E9 B9000800   JMP 00485DD3   ——跳到空白位置
00405D1A   90            NOP

00485DD3   8945 FC       MOV DWORD PTR SS:[EBP-4],EAX   ——因为占用了405D15,所以先将原来405D15的代码写回这里
00485DD6   6A 3A         PUSH 3A     ——特效号
00485DD8   8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]   ——将保存在[EBP-C]的4927F0存放在EAX里面
00485DDB   8B48 08       MOV ECX,DWORD PTR DS:[EAX+8]   ——再将4927F0+8这个内存地址里面的数据,即攻击方武将的DATA内存地址存放在ECX里面
00485DDE   E8 261CF8FF   CALL 00407A09   ——调用407A09
00485DE3   85C0          TEST EAX,EAX   ——EAX是否为0
00485DE5   74 07         JE SHORT 00485DEE   ——为0,即没有带上此特效的宝物,就要跳到后面的代码去计算普通的连击率
00485DE7   B0 64         MOV AL,64   ——前面的EAX不为0,即有带上此特效的宝物,所以连击率为100
00485DE9   E9 77FFF7FF   JMP 00405D65   ——直接跳到连击率函数的最后输出到原来调用连击率函数的位置
00485DEE   8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]   ——没有带上主动连击特效的宝物,就要计算普通的连击率,因为405D18同样被占用了,所以原来的405D18要写回在这里
00485DF1   E9 25FFF7FF   JMP 00405D1B   ——最后跳回到之前跳出来的后一条代码

这样子,主动连击的宝物特效就添加完成了。兵种特效可以参考下面的:
兵种双击属性改法:

QUOTE:
http://www.xycq.net/forum/thread-140085-1-1.html
00405D15   . /E9 E8330000   JMP Ekd5.00409102
00405D1A     |90            NOP

00409102   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
00409105   .  6A 3A         PUSH 3A    ;宝物特征
00409107   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
0040910A   .  8B48 08       MOV ECX,DWORD PTR DS:[EAX+8]  
0040910D   .  E8 F7E8FFFF   CALL Ekd5.00407A09  
00409112   .  85C0          TEST EAX,EAX
00409114   .  74 07         JE SHORT Ekd5.0040911D
00409116   .  B0 64         MOV AL,64 ;双击几率
00409118   .^ E9 48CCFFFF   JMP Ekd5.00405D65
0040911D   .  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
00409120   .  8B4A 08       MOV ECX,DWORD PTR DS:[EDX+8]
00409123   .  E8 E8D4FFFF   CALL Ekd5.00406610
00409128   .  25 FF000000   AND EAX,0FF
0040912D   .  83F8 31       CMP EAX,31   ;兵种
00409130   .  75 02         JNZ SHORT Ekd5.00409134
00409132   .^ EB E2         JMP SHORT Ekd5.00409116
00409134   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00409137   .^ E9 DFCBFFFF   JMP Ekd5.00405D1B

以上设置3A(防御两次攻击)的特殊效果为主动双击,设置兵种31(原木人、偶EXE中的大将军)主动必双击,宝物优先于兵种。

2、减轻物理攻击伤害
继续占坑待填中。

[ 本帖最后由 godtype 于 2009-10-6 13:26 编辑 ]
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 11:39 资料 个人空间 短消息 只看该作者
留坑备填
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 11:40 资料 个人空间 短消息 只看该作者
留坑备填
顶部
性别:未知-离线 star175

★★

Rank: 9Rank: 9Rank: 9
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 讨逆将军
好贴 3
功绩 153
帖子 686
编号 91725
注册 2006-11-16


发表于 2009-8-10 12:07 资料 文集 短消息 只看该作者
回复 #1 godtype 的帖子

好贴,希望能对新手有帮助

再补充一个和4B2C50有关的


4B2C50 +8 和AI行动方针有关

                   +8                          +9  +A        +E(如果为7就是可控)
被动出击        FF                                             3
主动出击        FF                                             1
坚守原地        FF                                             2
攻击我将    要攻击武将的战场编号                      0
到指定点        FF                          X   Y            0
跟随武将    要跟随武将的战场编号                      4
逃到指定点      FF                         X   Y            4

[ 本帖最后由 star175 于 2009-8-10 13:55 编辑 ]
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 12:15 资料 个人空间 短消息 只看该作者
回复 #8 star175 的帖子

原来如此,因为八岁的帖里面没有,所以我也不知道,谢了。
等一下我再补上去,如果看到有其他问题,帮忙指出一下。
顶部
性别:未知-离线 《苍狼白鹿传》

Rank: 4
组别 士兵
级别 牙门将军
功绩 6
帖子 571
编号 321756
注册 2009-5-10


发表于 2009-8-10 12:49 资料 短消息 只看该作者 QQ
以前把AND和ADD搞混了

NOP
无作用或称为自动跳过这一行代码 (用UE打开编辑exe文件时你看到90,等同于汇编语言语句nop)

nop的应用对于保密有帮助

[ 本帖最后由 《苍狼白鹿传》 于 2009-8-10 12:54 编辑 ]
顶部
性别:未知-离线 star175

★★

Rank: 9Rank: 9Rank: 9
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 讨逆将军
好贴 3
功绩 153
帖子 686
编号 91725
注册 2006-11-16


发表于 2009-8-10 13:54 资料 文集 短消息 只看该作者
回复 #9 godtype 的帖子

有点错误,不Data号,而是战场编号
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 14:27 资料 个人空间 短消息 只看该作者
回复 #11 star175 的帖子

哪个地方?
顶部
性别:未知-离线 star175

★★

Rank: 9Rank: 9Rank: 9
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 讨逆将军
好贴 3
功绩 153
帖子 686
编号 91725
注册 2006-11-16


发表于 2009-8-10 16:19 资料 文集 短消息 只看该作者
回复 #12 godtype 的帖子

8楼的帖子

攻击我将    要攻击武将的战场编号           

跟随武将    要跟随武将的战场编号
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-8-10 17:06 资料 个人空间 短消息 只看该作者
回复 #13 star175 的帖子

已修正了。
顶部
性别:男-离线 主席
(宅狼)

Rank: 4
组别 士兵
级别 牙门将军
功绩 6
帖子 569
编号 77513
注册 2006-7-31
来自 荆州重镇
家族 轩辕狼党


发表于 2009-8-10 18:31 资料 短消息 只看该作者
诚心学习中,毅兄应该多占几个坑备用
顶部
性别:未知-离线 jijyo

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 31
编号 187193
注册 2007-7-10


发表于 2009-8-10 20:08 资料 短消息 只看该作者
渔之教程,远胜于鱼
学习中..0......
顶部
性别:未知-离线 morningboo
(冰冷的山)

Rank: 4
组别 士兵
级别 偏将军
功绩 4
帖子 356
编号 171314
注册 2007-6-5


发表于 2009-8-10 21:05 资料 短消息 只看该作者
受益匪浅,受教了~
顶部
性别:未知-离线 morningboo
(冰冷的山)

Rank: 4
组别 士兵
级别 偏将军
功绩 4
帖子 356
编号 171314
注册 2007-6-5


发表于 2009-8-12 09:01 资料 短消息 只看该作者
这个帖子不能沉!!!顶上去!
顶部
性别:男-离线 小小KS

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 右将军
功绩 11
帖子 1063
编号 294403
注册 2008-10-11


发表于 2009-8-12 17:23 资料 文集 短消息 只看该作者 QQ
好乱...好多....看不懂= =
还是UE来得简洁(其实UE也不简洁....)
顶部
性别:男-离线 闻鸡起舞

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 223
编号 68175
注册 2006-5-8
来自 甘肃省兰州市


发表于 2009-8-14 09:45 资料 短消息 只看该作者 QQ
我有一个问题:
新引擎很好用,但是不太喜欢里面的围攻和必杀.
我想取消里的围攻和必杀,请问如何修改???
顶部
性别:男-离线 sddciwei
(刺猬)


Rank: 4
组别 校尉
级别 奋威校尉
功绩 11
帖子 128
编号 258419
注册 2007-12-31


发表于 2009-8-15 15:34 资料 文集 短消息 只看该作者
好贴,刚接触OB,对我来说还有些深奥,留下慢慢学习!!
顶部
性别:未知-离线 智才將帥

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 56
编号 317859
注册 2009-4-11


发表于 2009-8-29 16:59 资料 短消息 只看该作者
为什么我打开data.e5的时候
ob说不能打开
因为不是32bit

那到底如何解决呢?
顶部
性别:男-离线 z6482

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 24
编号 339479
注册 2009-9-17


发表于 2009-9-25 10:03 资料 短消息 只看该作者
这帖可被我找到了!汇编的那些助记符毕竟比十六进制的数据看起来舒坦些呀!我在想要是有一天能出一款将汇编再反编译成C一样的高级语言的软件就好了,毕竟汇编那么多指令,那么多的地址还是让人看起来不爽啊!好的工具才能提高生产力和工作效率!呵呵!现在最迫切需要的就是介绍OLLDBG的最基本用法的东西了,最好是包括简单的CCZ修改的。建议尽快来一个实例制作的,实例可以不要恨强大的功能修改、宝物打造,只要能够包括修改所必要的一些操作和技巧就可以了,这样既可以学习OB又可以学习CCZ修改的一些技巧。LZ加油!!
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-10-6 13:29 资料 个人空间 短消息 只看该作者
更新第四部分的第一点
顶部
性别:未知-离线 ducksuper

Rank: 2Rank: 2
组别 百姓
级别 奋威校尉
功绩 1
帖子 129
编号 68614
注册 2006-5-13


发表于 2009-10-7 22:08 资料 短消息 只看该作者
黄色解说真是太详细了
顶部
性别:未知-离线 时间轴空转
(时空)

Rank: 9Rank: 9Rank: 9
组别 校尉
级别 安南将军
功绩 32
帖子 2876
编号 267174
注册 2008-2-11
来自 香巴拉
家族 轩辕三国杀


发表于 2009-10-7 22:22 资料 个人空间 短消息 只看该作者
这么好的东西一定要顶!
顶部
性别:未知-离线 ryanley

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 34
编号 313775
注册 2009-3-5


发表于 2009-10-16 04:34 资料 短消息 只看该作者
小弟在修改06的时候碰到了点问题……

在arg1 = 00000038的时候他提示说“未认可操作数”
请问是什么意思?
要怎样做出调整?
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-10-16 07:38 资料 个人空间 短消息 只看该作者
回复 #27 ryanley 的帖子

直接从OB中复制出来是会这样显示的:
0043B59E  |. 6A 38          PUSH 38                                  ; /Arg1 = 00000038

以上面这条为例,修改的时候,只要输入  PUSH 38  就可以了,后面从 “;”开始的部分都不要输入。
顶部
性别:未知-离线 ryanley

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 34
编号 313775
注册 2009-3-5


发表于 2009-10-18 11:42 资料 短消息 只看该作者
多谢,我现在会写了。


还想问一下那个连续三个出场设定的要怎么写?我查过过去的帖子,但是改写之后有问题,一进去没有R形象或者弹错……

我现在这个版本的是不出场也等于出场,就是每次可决定十个人出场
然而一旦遇到那些需要禁止某人出场的环节就很头痛,唯一的办法就是离队……

而且我这个离队还是带走装备……

所以您告诉我那个连续三个出场的要怎么写,或者怎样改出离开时也有留下装备的办法都行……比如离开时等级+1之类的,我在老帖子里看到的方法……
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-10-18 12:17 资料 个人空间 短消息 只看该作者
回复 #29 ryanley 的帖子

东方教主的帖里面已经有了,不过我用岱瀛版改过一次也有很多问题出来,以后没有再研究了。至于离队带走装备的问题,我在其他人的发问帖也提过,只能参考其他引擎来改。


顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-11-14 12:35
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.025037 second(s), 11 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP