|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 
" G/ g, K E. y/ Q在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ...
/ `; P9 H) _: `4 ^2 v7 d8 u# x: k" M( k5 q7 N8 o8 t6 R
我只是今天路过正好看到! F6 ^; K4 ?( e e
所以稍微调试了下
$ r U: `: n1 q+ a; C, `1 u, T数据断点下断要下入口地址' u9 E, [3 I+ N$ M6 Z
, p6 R' M0 y3 \ R+ R所以是020030EC,而不是ED,因为对应指令的入口就是EC
, I8 n6 K7 i6 O) C
2 r. \! L2 c( {6 _7 @+ F至于思路...我不确定你是否看得懂
5 o- P& M1 @' Y- o9 m找到指令后因为是参数共用的$ o, ^% }$ Z( y1 i y, O/ J
你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)' e, F6 u- U0 a3 r+ S
然后执行到返回
- L1 q' T3 n5 a+ E E% a: v. Q6 [
发现返回的地方的前面的语句还是参数公用语句
+ J( T2 ~( Q- K5 @5 @. y) m9 c于是又选择性的再使用指令断点执行到返回
& O# j7 D& P! b+ A& s2 |' c; B; U$ o& f4 g7 M0 ]' [( v
即可找到有关HP参数的函数Call,变更传递参数$ `4 h% y- O# Y6 L
比如HP减少时
: t) G- f- t: ?传递r0寄存器给Call(也就是bl xxxxxxxx)- E5 d/ }- ^9 T3 F' u% H& Y0 z
r0是一个负数
9 k; n7 J( I3 K于是我们在调用Call时
. O4 _, S! {. @; z; Z' ~把r0清零
( N+ N# h- t* V当然不好的地方是7 S9 G/ Y5 z+ z6 d" h* @& S
HP虽不会减少,但也不会增加了8 Y5 K9 M+ j; a# v- r0 U
这里想要只加不减就需要跳转来判断r0了
7 Z! \% W$ d! E3 K) L2 }. I
4 h, d5 P; X7 U- p' u2 b. s这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|