|
|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 
5 m$ `8 C5 @' V/ S8 _( J! g( }在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ... + t3 n, Y* U. m, {, }5 b
7 N: v+ T4 J5 e我只是今天路过正好看到
* ?& R' w9 N: T所以稍微调试了下. n \5 _6 w, N
数据断点下断要下入口地址
' D' E: e6 ^ S2 x; Y ^, H8 D, d9 h* V3 g5 k6 C
所以是020030EC,而不是ED,因为对应指令的入口就是EC
% P% j5 p# Y, p% p& u. U: Q$ w
2 [% p- P$ Q9 a0 {- `$ @+ X至于思路...我不确定你是否看得懂0 u: W. p. X# V) a( Z; g+ h
找到指令后因为是参数共用的
# T$ w0 F9 Q" b, U你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)
: m9 e) P6 O6 t. h; {3 h然后执行到返回, }# t& [! ]4 `. e& W
! @: p' s' r! n1 L$ m4 W发现返回的地方的前面的语句还是参数公用语句8 `7 ?7 {" S, G7 H8 H1 T, t
于是又选择性的再使用指令断点执行到返回% c& ^ A, J1 A. L$ M: M
# M' S( e8 N5 K, I7 A& k" a, s
即可找到有关HP参数的函数Call,变更传递参数
9 ]$ h+ ?8 S6 y7 O; f$ F比如HP减少时# }/ M% E4 w4 s+ `& G* N" i
传递r0寄存器给Call(也就是bl xxxxxxxx)
( D. B6 P/ W& d. K4 w0 H9 j/ }1 tr0是一个负数. o4 f, t3 y l) i- V
于是我们在调用Call时% C. [. E; G% D& t# f6 c1 N
把r0清零, C( `" B' ?; q1 g4 d3 g
当然不好的地方是% n# X: d; z1 M+ s
HP虽不会减少,但也不会增加了
+ c- b9 \& ^8 p/ b7 g这里想要只加不减就需要跳转来判断r0了
: D0 A5 p: ^' `7 T1 r( V, I" l
" U$ s! E+ H( _3 ~( z! y% T这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|