|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 
# Y6 m1 g, z9 r8 n C0 \在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ...
- L) Q/ g6 O9 X$ } X9 G" v8 `. l" }! t/ |# X- u+ Z; G& d
我只是今天路过正好看到
# j0 f3 w: M6 h5 i9 i: u" o所以稍微调试了下
, E* q% j5 n$ ~5 w数据断点下断要下入口地址
5 M. n- i _2 V; ^! c: W! g+ b3 @$ h |% R! s
所以是020030EC,而不是ED,因为对应指令的入口就是EC
G1 d; s& y7 [# M& p* Y! c+ V/ O& o( N% p, u, [# D) |
至于思路...我不确定你是否看得懂
/ M1 ^0 {9 [& R! p& j ?找到指令后因为是参数共用的
A% O" w+ @. s4 `: N你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)+ J- U2 ]7 T! L( l
然后执行到返回, \9 C4 d& {9 T$ ]2 c- Y- c
0 O. {# k% g) m4 [* h发现返回的地方的前面的语句还是参数公用语句3 i6 ^, A* W: i7 M; H9 W) L
于是又选择性的再使用指令断点执行到返回
4 S6 c" s7 t |- R( C# v2 r+ n: @, h F' o; a# j
即可找到有关HP参数的函数Call,变更传递参数
1 r3 i: { S" M9 R" }& |5 T比如HP减少时
5 q1 C J) z# L; I0 `: H传递r0寄存器给Call(也就是bl xxxxxxxx)
8 i) ~, I( }( H. I/ tr0是一个负数& F0 ~/ O. w$ S9 I. _7 J+ k
于是我们在调用Call时5 Z% l" u8 i' p9 X; `
把r0清零, c2 Y4 _$ J9 q
当然不好的地方是9 V, Z: V8 b& O& F9 T9 i$ J) a
HP虽不会减少,但也不会增加了% R& H2 v2 ]+ G$ g/ I$ D z
这里想要只加不减就需要跳转来判断r0了, f1 w4 |5 M# w" r3 _
8 w, ~9 D: g" A& o. s: u
这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|