|
|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 $ W |' S. {, ~
在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ... : g8 @/ C6 M* D7 v$ X) K
8 z7 c1 {" c8 Y7 O0 f6 B
我只是今天路过正好看到; x% L) [+ J0 h2 x( r( B+ l
所以稍微调试了下
9 I7 |7 h: f# i% P1 Z2 p数据断点下断要下入口地址
$ I e' _( X# D9 F' x/ D0 s/ H/ S# M
所以是020030EC,而不是ED,因为对应指令的入口就是EC
) z/ j& c+ k! E# j( c+ D) c* N6 G9 M1 ]
至于思路...我不确定你是否看得懂
1 b3 b+ H( G0 J- [6 }) @) G* b找到指令后因为是参数共用的
9 F6 m; I6 Z7 V2 i$ K你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来); c) a: [# K- B4 s
然后执行到返回
8 E3 l* c x2 P: ^' i: |
( A3 l& c7 W" Y! v7 F+ N) ]发现返回的地方的前面的语句还是参数公用语句6 h: b0 ~4 s3 S# ^& J( Y1 ~
于是又选择性的再使用指令断点执行到返回
8 c2 n, X$ B- {& c! L4 ]# c& o) ?3 Y* D; b" L! K2 U
即可找到有关HP参数的函数Call,变更传递参数
, |) y, \3 p) A' ]) V比如HP减少时
: d5 \+ Q' f- F6 g% O传递r0寄存器给Call(也就是bl xxxxxxxx)2 h* r7 w3 R& f) _% L. d" \
r0是一个负数
2 Q; I7 ?! D# ?, l, r, i0 Y于是我们在调用Call时
1 d- e, A' a% p; {, ?把r0清零% W! h. f+ V0 g/ A3 n% |
当然不好的地方是" h4 w A V- K! L
HP虽不会减少,但也不会增加了# l5 c9 e+ y6 n* L7 |1 \
这里想要只加不减就需要跳转来判断r0了
0 P8 a- B0 h4 Z& Z9 I. q
1 [; J, v1 N2 a9 e/ k这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|