|
|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 
9 h. P6 ]6 D( Q! C在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ...
$ a+ X) e& V# J
0 L1 L/ i D( P* [' v% \9 j我只是今天路过正好看到
8 L5 I; j! S( f所以稍微调试了下
' _* k5 r+ z7 D) o# r- W- [1 c$ ]数据断点下断要下入口地址& p; W- o! {, }0 ?7 p9 U. Z3 O
( y6 K# W4 M, Y
所以是020030EC,而不是ED,因为对应指令的入口就是EC
* r$ L. M: {& W; W7 @$ a8 D/ H2 S+ I; a: N8 P" N- s
至于思路...我不确定你是否看得懂1 P- Z4 k# o1 {3 R( O
找到指令后因为是参数共用的. A- s+ r& g j, w8 p) v
你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)8 [' |' T- }! [/ G2 R! I( |
然后执行到返回! u+ i: L7 q1 M% Z5 X2 b
7 r3 V0 p# A# Q9 y( W4 V发现返回的地方的前面的语句还是参数公用语句
2 B( i% f- s+ e/ N于是又选择性的再使用指令断点执行到返回
( h" R5 D2 C2 P/ H/ Z( A" [
, d! d1 O, A; P0 \即可找到有关HP参数的函数Call,变更传递参数
' S! s' t u7 `比如HP减少时
' l$ i5 x& h X% W P' }, R传递r0寄存器给Call(也就是bl xxxxxxxx)
4 M& s4 M2 c' g* |r0是一个负数 L5 L. q" I' p- q
于是我们在调用Call时
8 ^9 K0 N8 g. m s+ ~) a5 T2 t把r0清零
) S: l% v, n& r I+ n. b: |当然不好的地方是; T' b$ v& A$ ^! S9 \, {1 H& N
HP虽不会减少,但也不会增加了0 X$ M4 ], k) d4 C$ y b
这里想要只加不减就需要跳转来判断r0了
0 j. }$ ^1 A6 r! C
& d0 ?7 ^# a3 Q4 T! r0 n' x这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|