|
|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 
0 n. f- W( ~- y7 a, N4 w在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ... 1 `7 Q& k* j$ D# F6 E2 x2 \
9 V; d. j+ [9 v我只是今天路过正好看到
- [/ }, B- t" U# k% l$ S- X所以稍微调试了下+ \, N) i |- R0 Y) ~) k8 v
数据断点下断要下入口地址
9 E1 Z/ G( r: s: X) j2 A7 l( `
H3 _# t! x0 x0 N R2 `' I所以是020030EC,而不是ED,因为对应指令的入口就是EC2 ]9 V- l7 N" |" g- b
0 }: K1 w: G# u7 O: r至于思路...我不确定你是否看得懂
- q/ R/ Z7 o" H1 @找到指令后因为是参数共用的: O/ u; {2 n J0 o- _: G
你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)
( L: T' \7 [, n6 B+ I9 {3 R然后执行到返回
3 [; l. b8 g1 Q; c, m& k4 H
& [2 h! D- Q3 I发现返回的地方的前面的语句还是参数公用语句4 Y" C3 X& Y8 Q9 |7 S( O2 ` m
于是又选择性的再使用指令断点执行到返回' F; s; M$ h5 c* F2 r
! Q1 R2 u* B% d) v# ^即可找到有关HP参数的函数Call,变更传递参数5 l) k% C$ r' g1 M( F1 t
比如HP减少时
) {, ~" c/ ~6 r e- R. u传递r0寄存器给Call(也就是bl xxxxxxxx)" d i' A6 E- N m% y
r0是一个负数
0 t1 s# [& K. l0 N) T$ K8 h& e% R$ }于是我们在调用Call时
& l! u0 w; X/ J8 q- q1 D把r0清零
, u9 x- A) `3 `0 V9 L( q. I0 G当然不好的地方是6 E8 m% B, V7 Q, m
HP虽不会减少,但也不会增加了7 v! Y- Z& g* u# a! {( d
这里想要只加不减就需要跳转来判断r0了
; H0 M% a6 E( ^6 @4 R; e8 C+ Q! t- I# K0 ]
这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|