在上一章中,我们搜索到了"恐龙新世纪"模拟游戏中1号机台玩家血量的地址,那么,这个地址在对该游戏的逆向工程中可以起到什么作用呢?我们可以考虑,玩家血量的变动有多少种情况:
1、被敌人攻击
- 得到敌人某个技能的攻击力,自身的防御力。
2、被队友攻击
- 得到队友的攻击力。
3、被道具击中
- 得到道具的攻击力。
4、使用扣血技能
- 得到使用技能扣除的血量值。
5、拾取回血道具
- 得到某个回血道具回复的血量值。
也许有更多的情况,这里只列出常见的几种情况。
那么,我们需要MAME的中断功能来得到这些我们想要得到的数据。
中断的意思是在某个条件下,中断程序的运行,这个条件可以是多种多样的,比如说最基本的。程序运行到某行时中断。但我们并不知道程序在哪一行改变玩家血量的值,所以,我们利用另一种中断来找到程序在哪一行对玩家血量的值进行改变。
MAME的中断指令有两种:
bpset
bp[set] <address>[:<CPU>][,<condition>[,<action>]]
在指定的<address>处设置新的执行断点。 <address> 后面可以选择跟随一个冒号和一个标记或调试器 CPU 编号,以便为特定 CPU 设置断点。 如果未指定 CPU,则将为调试器中当前可见的 CPU 设置断点。
可选的 <condition> 参数允许您指定每次命中断点地址时将计算的表达式。 如果表达式的结果为真(非零),断点将停止执行; 否则,执行将继续而不通知。 可选的 <action> 参数提供每当遇到断点并且 <condition> 为 true 时要执行的命令。 请注意,需要用大括号 { } 将操作括起来,以确保命令中的逗号和分号不会在 bpset 命令本身的上下文中进行解释。
设置的每个断点都分配有一个数字索引,可用于在其他断点命令中引用它。