|
|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 - h5 Q$ L3 S+ d5 r7 v+ d
在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ... 4 [/ g4 |- `8 x
# b4 y4 C6 E- O& J" G4 ]我只是今天路过正好看到+ `! w) A# N$ [3 j5 R9 }
所以稍微调试了下
; O ?7 U! q! J A% q数据断点下断要下入口地址
8 j$ w5 ?$ H! i$ F G u' U, C* q# x6 J) K( c
所以是020030EC,而不是ED,因为对应指令的入口就是EC
. y" V7 u: [/ Q& `+ d
: F$ Z- I* v6 h" ~3 N7 a$ u- f至于思路...我不确定你是否看得懂
! S$ Z3 f Y6 H. V) u找到指令后因为是参数共用的( @5 N4 N/ @0 ? q* Z% b
你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)8 t, a# p5 q2 z4 ]
然后执行到返回* E* H% X% K$ a$ P) H& O
* q% ]4 E9 R X1 j, |, T8 p+ {
发现返回的地方的前面的语句还是参数公用语句
5 [* N. t( I4 _ o# ]0 Q) k0 x于是又选择性的再使用指令断点执行到返回% f+ v' q) A/ C$ m7 `
% b3 o( x3 b: [% L Z
即可找到有关HP参数的函数Call,变更传递参数! a& C, c9 J3 n) v* w5 [
比如HP减少时 d& J6 ~( H% j, `- \% \
传递r0寄存器给Call(也就是bl xxxxxxxx) \' w3 e h' _- Q& t/ ?# E
r0是一个负数
! O# Q" K7 F8 ]& R1 `于是我们在调用Call时
7 J: B6 l3 }8 f! r4 ]) c把r0清零
+ G _% g% D1 V% `+ v& h: j! d1 n0 A当然不好的地方是% r& Z" }; [$ `/ W4 L; b, y" Q
HP虽不会减少,但也不会增加了# M5 O* M1 k( D6 R
这里想要只加不减就需要跳转来判断r0了/ U+ L! x7 j0 _" \
5 E, C2 h9 c$ r# l" E
这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|