|
|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 
# a8 |1 u) z# C: F9 T在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ...
& r( Z! L- l0 w9 z! j
3 T5 o$ R7 B7 H, X我只是今天路过正好看到 G2 j! {7 t" S3 e
所以稍微调试了下, P2 B: h+ W) A$ q* g1 U' H
数据断点下断要下入口地址
5 O7 m# D$ ]6 F& i' I# X& x
6 E: z; S# u9 N% q0 N6 T所以是020030EC,而不是ED,因为对应指令的入口就是EC
. @% |+ X N2 J% @+ Y8 M. X8 u3 g* o2 V9 s2 k8 }) @
至于思路...我不确定你是否看得懂
, L6 E) P5 \1 p/ K! O找到指令后因为是参数共用的
8 l1 y* U* w9 n$ C你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)9 [/ I5 A% F4 l5 i+ n
然后执行到返回; J5 H+ B& t; u% y
+ P( U( {* }: T' r% J' J Z6 m- S9 }3 j
发现返回的地方的前面的语句还是参数公用语句
% t% l$ v4 R$ Q7 h于是又选择性的再使用指令断点执行到返回* K1 X: f5 y7 @1 S M
& ?: @3 Q& b* M% e- o, E: }; E即可找到有关HP参数的函数Call,变更传递参数 q, e4 ?: d( X5 s3 b c, M' a
比如HP减少时, I8 Q x& Y# e, y/ c9 _
传递r0寄存器给Call(也就是bl xxxxxxxx)
/ w' d% a9 {! E& Zr0是一个负数1 t d+ Y: `5 f( E7 S5 u& V* y
于是我们在调用Call时$ \" |9 W* [* z1 I+ n
把r0清零
0 Z' i3 h0 A# E, V* u6 g当然不好的地方是
0 n' w7 T) l% [& [& k6 mHP虽不会减少,但也不会增加了0 @9 Z0 M( {' t' B; p0 U
这里想要只加不减就需要跳转来判断r0了, A% F1 ?1 X d; z% [ a
& c4 Y* G0 t0 X2 a$ L4 }2 o这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|