|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 
7 Q0 ?; M! X: q% v在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ...
& n' p. d( F* G" d _3 G, t, D3 v: _% B1 ~: S
我只是今天路过正好看到
$ O3 o! y* ]. G2 f" V1 ^1 U+ H所以稍微调试了下" O' r7 B4 w W4 M9 S
数据断点下断要下入口地址
+ c t7 V6 r9 t+ w
: Y* _' n* _4 M4 V; Z6 `( o% ]; {所以是020030EC,而不是ED,因为对应指令的入口就是EC
1 B& C/ p+ M4 ^, C' d- \
: C7 ~7 Y' k; p) L4 H: z3 p, l至于思路...我不确定你是否看得懂
* Z9 o2 n8 Y' w9 y2 Q找到指令后因为是参数共用的
& ]+ m. `2 q! {2 a6 I你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)4 Q7 s5 K% P! J# j% R8 Y
然后执行到返回
s* Z2 [ ?4 N. [6 |6 w! S3 j @3 V6 {7 t! @6 }; E- {3 U6 o
发现返回的地方的前面的语句还是参数公用语句5 F G; `* H% x4 o/ b, B" w9 h, e
于是又选择性的再使用指令断点执行到返回9 n t5 I: E0 @/ N% w
: G) W" H0 M3 B; [* k: ]% {/ f9 S/ m
即可找到有关HP参数的函数Call,变更传递参数
( X. } N' l2 O, e- f! \8 p比如HP减少时 J3 V, ^* s. a
传递r0寄存器给Call(也就是bl xxxxxxxx)" J7 T2 q }9 ]4 B2 m
r0是一个负数
) p0 c c! Q$ I, l于是我们在调用Call时8 _. ]; t( K4 j2 A1 v! @
把r0清零, O+ r; H( D3 C4 M
当然不好的地方是
: B) Z3 G: M4 e( K- |HP虽不会减少,但也不会增加了
. j: K" q6 O4 H7 n) `$ {这里想要只加不减就需要跳转来判断r0了7 S) U+ L' \; ~$ ?; {% {
* n. B$ D! |2 V/ ^这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|