梦幻模拟战吧 关注:56,838贴子:394,439

MD调试的一点心得和实例

只看楼主收藏回复

不是大触,只是把自己的一些心得分享一下。
以Regen调试模拟器为例,其实我也就只会这个。
68000调试器,先看图,各个区域的作用看标注。

然后是一些需要注意的地方:
1.首先这个调试器有一个小问题,设置了读取或者写入的断点,调试器在断点处中断了,如果这时候点步进,那么这个断点处的这条指令会被跳过而不执行,如果是直接点OK,则会正常地回到游戏。设置PC断点没有这个问题。
2.一点基础知识,0x前缀表示后面的数值是十六进制,如0x18换算到十进制为24。调试器中美元符号$与0x的作用相同,井号#则表示后面的数值是一个常数。
3.PC断点是指令断点,在程序运行到这个地址的时候中断,读/写断点在读取/写入数据到这个地址的时候中断。
4.地址断点可以设置内存断点或者ROM断点,设置内存断点需要加FF前缀,如对内存地址630C下断点,这里要填FF630C,设置ROM断点则直接填ROM地址就可以,如对ROM地址18416A下断点,直接填18416a。
5.汇编窗口显示的指令很少,要善用Go to Adress和Show disassembly查看指令的上下文。
6.寄存器断点有时候会用到,当寄存器的数值变化成所填的数值的时候就会中断。
7.68000中的nop指令的机器码为4E71,nop指令即空指令,此指令不进行任何操作。
8.汇编指令常用的并不多,可以自己看看指令集和各种教程。这里有一个别人写的简单教程,可以看一下 http://zero3c.blog.163.com/blog/static/278215082013813111414953/
调试实例一:25关杰西卡传送后清空了MP (639C)
首先找到杰西卡的MP的内存地址:63D4,怎么找?603C开始是各部队的战场数据,每部队占0x60字节,找找很快就能找到。然后对63D4下写断点。

这里设置断点。

设置好之后按OK继续游戏,传送完的时候会自动中断。
这个调试器还有一个问题,设置了写断点的时候,读取这个地址的数据的时候也会中断。所以调试器会在PC=010356这里中断。
但这不是我们想要的,按OK继续游戏,直到它中断在PC=016C0A。使用show disassembly查看一下上下文的指令。

地方找到了,那么接下来就得分析,这个得靠自己的经验,这里我就简单分析一下这个问题。
这段代码实际上是使用魔法消耗掉了MP,这里剧情使用了传送魔法,这个魔法也需要消耗MP,而这个剧情传送魔法的魔法代码是0x18(保存在内存0xA958),但是设计者并没有给0x18这个剧情传送魔法加入魔法的数据,根据这段代码所获取的传送魔法的消耗MP是0x90,无论人物有多少MP,经过这么一减,自然就变0了。
另外在22关贝伦哈尔特传送的时候MP却没有变成0。原因是0x016BE6~0x016BF0,这里判断人物代码是否为0x0E,如果是,则跳过消耗MP。
综上所述,剧情中的传送魔法有BUG,如果不是贝伦哈尔特使用的话会被清空MP。
修复方法也很简单。
方法1:不判断人物,判断魔法代码,如果魔法代码是0x18则跳过消耗MP。
修改之后的代码:
016BE6:move.w $a958,D0 (3038A958)
016BEA:cmpi.b #$18,D0 (0C000018)
016BEE:nop (4E71)
方法2:粗暴一点,直接跳转,不过不知道会不会出问题。
016BF0:beq $16c20 (6700002E) -> bra $16c20 (6000002E)
调试实例二:给特定人物增加经验值
首先要找到使用了给人物增加经验值的地方,方法有几个,不过最方便的就是打开剧情编辑器查看。

可以看到,06就是代表斯科特,06在ROM的地址是19F309,下读断点。

按OK继续游戏,对话完毕的时候中断在PC=0167BE这里。

这里就是我们要找的地方了,判断人物代码是否为02、03、06,详细就自己分析吧,修改的话对照着机器码就能改,想要增加多几个?自己研究吧。下面好像还有设置标志什么的,自己研究吧。


IP属地:广东1楼2016-12-27 23:35回复
    好久不见


    IP属地:上海2楼2016-12-27 23:41
    收起回复
      2025-08-30 10:09:24
      广告
      不感兴趣
      开通SVIP免广告
      痕神再次出手放好东西啊


      IP属地:内蒙古来自Android客户端3楼2016-12-28 00:15
      回复


        IP属地:内蒙古来自Android客户端4楼2016-12-28 00:22
        回复
          不得不佩服


          IP属地:内蒙古来自Android客户端5楼2016-12-28 00:22
          回复
            前排留名


            IP属地:福建来自Android客户端6楼2016-12-28 07:42
            回复
              火钳刘明


              来自iPhone客户端7楼2016-12-28 08:58
              回复


                来自iPhone客户端8楼2016-12-28 08:58
                回复
                  2025-08-30 10:03:24
                  广告
                  不感兴趣
                  开通SVIP免广告


                  来自iPhone客户端9楼2016-12-28 08:59
                  回复
                    这是什么修改器


                    来自iPhone客户端10楼2016-12-28 12:06
                    回复
                      这他么还不是大触 那你告诉我什么叫大触


                      IP属地:上海来自Android客户端11楼2016-12-29 17:23
                      收起回复


                        IP属地:广东12楼2016-12-29 22:32
                        回复
                          不明白,还是用金山游侠V,内存修改算了。


                          IP属地:广东13楼2016-12-30 09:57
                          回复
                            很厉害的样子


                            IP属地:北京14楼2017-01-05 15:35
                            回复
                              2025-08-30 09:57:24
                              广告
                              不感兴趣
                              开通SVIP免广告
                              技术贴,


                              IP属地:安徽来自Android客户端15楼2017-01-12 21:36
                              回复