|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48
- y. C1 B. v9 C& c在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ... 6 i; _7 U2 q/ J$ l
# ^, n @$ c' r" n2 `
我只是今天路过正好看到- K1 k% a. `* @; s
所以稍微调试了下
, z9 ]& o' T& }# P/ K0 |8 m! U; u8 I数据断点下断要下入口地址
# H0 [; t% F6 x" `$ {8 n% H4 K6 |5 d" d* N0 v5 t$ G
所以是020030EC,而不是ED,因为对应指令的入口就是EC
+ _ i C* Q7 c+ g
* L8 v l3 O8 J' h* i/ b8 i至于思路...我不确定你是否看得懂
. _1 [) s2 h( Z b% G, t% v- `找到指令后因为是参数共用的
: z1 S Q( O' m你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)
; h n6 X, X! n( g, a然后执行到返回
! w- U( Z, X8 b% j+ o8 j. K4 |7 {
发现返回的地方的前面的语句还是参数公用语句: B3 h5 W! n9 w ?6 s, ~
于是又选择性的再使用指令断点执行到返回; i9 @+ G* W+ }0 y3 E6 o. M. z
* W6 [ Z: c2 _+ V, U
即可找到有关HP参数的函数Call,变更传递参数; d8 F' _& D" `( U- p( k( ]4 ]
比如HP减少时
3 d) t) f8 w2 i& ~7 Z; \传递r0寄存器给Call(也就是bl xxxxxxxx)
P" d, }, U! R5 i! a6 ar0是一个负数/ g1 z! H# J9 N) K
于是我们在调用Call时
4 z& I) j( r1 J" w把r0清零% e' v* s; g6 c6 d
当然不好的地方是! s/ S9 z9 f& a$ O% W
HP虽不会减少,但也不会增加了/ M; b) t( T& R* `7 x* t( ?
这里想要只加不减就需要跳转来判断r0了
2 f" {- ]0 G3 I6 e( ~# _& e2 A5 v* e6 Z
这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|