|
|
发表于 2013-2-28 16:59:30
|
显示全部楼层
zsyf 发表于 2013-2-28 15:48 
9 X8 _9 I0 t0 \! d. x在看了银河大的《GBA游戏Romhack视频教学》后,除了用教程中所演示的恶魔城来实践相关操作外,最近还想找其 ...
5 ~2 S7 \( G8 y- {9 O7 P! T9 Q) A$ S* I5 h, m7 i( {: L5 y
我只是今天路过正好看到
. _9 H6 X0 ?: {. Q所以稍微调试了下3 E# x7 }' `* e3 z) Q2 V% m4 _
数据断点下断要下入口地址7 K0 X/ g: [4 K8 e/ a
$ q3 d% R! `- i所以是020030EC,而不是ED,因为对应指令的入口就是EC
9 B( e/ ^9 p/ g; D9 e4 e, t9 x, t$ c+ f/ o2 C( @# T- w
至于思路...我不确定你是否看得懂: ]: n" j8 M* x5 b L! P
找到指令后因为是参数共用的
% H7 s" }) i3 A- X* Q9 v$ l" b9 J你可以下指令断点,然后有选择性的断下,比如HP减少时的断下(因为能量减少、分数变动也会断下来)" V( A# @6 Z' ~% B4 d; v$ l& I+ M
然后执行到返回* N/ r! ]- n: A# k. h) X
, b1 F4 n. k* ^# _! \发现返回的地方的前面的语句还是参数公用语句" w/ B1 p4 X/ Z+ k( V5 q j
于是又选择性的再使用指令断点执行到返回
# D6 }' F$ d$ }: f& I w: x4 F; p4 b9 O/ K5 P
即可找到有关HP参数的函数Call,变更传递参数9 u- c; d* d% k- f. s
比如HP减少时
, n9 O% h$ A$ I8 z8 Q2 j( c. X0 g传递r0寄存器给Call(也就是bl xxxxxxxx)6 o4 ^. h ~! z4 v1 g% r; B+ s
r0是一个负数1 F$ g! u7 M7 e- G
于是我们在调用Call时8 Y( G& ~7 r, J6 w& U9 U( g u
把r0清零
, a; i# \8 e# M, [0 ^8 n/ l' e- [当然不好的地方是
% ?3 U3 M1 i, ]8 [2 P+ b% zHP虽不会减少,但也不会增加了! x- z) t- D0 b% }9 ?% q
这里想要只加不减就需要跳转来判断r0了
4 X8 E; t" U R; l3 n* |! O) N/ ]0 I" P. t2 I; K* b7 U( l# l* t
这样就可以避开能量、分数等对那段函数的公用,而只使得HP不减少 |
|