签到天数: 2030 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
: c" f4 R: Q5 A N f' `7 E: |
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html3 g4 V( ~' L/ t- _$ |) b
; i/ S0 J) b1 Q8 M
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。 R" O& Q2 j, t0 l5 y/ m
3 L! [* v) P& l本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
! M; O: v+ H2 @ w: j. F: k5 T1 M/ E; g9 g/ F! G
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减. e3 ?# l, F/ a* f+ B. }& m9 z, Y
7 [- X: k' H2 t6 [9 u7 k
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。* X0 \3 y. D; l3 C* ]0 A
. C+ z7 D: u! U- O$ l7 c2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:+ ?# D5 v3 w3 Q9 m
" E( l* o# [" i$ j, f, T0 m% a/ [" b+ h* C$ t& i
左上角框是显示汇编指令,右边是寄存器显示
; C' T2 H8 i" B* z) ?9 d" _, ^
7 ?1 p% I) n1 I/ I/ q2 U* HAddress Breakpoints是地址断点
* z7 c4 n: T I! P# w, R2 t' GAddress Range是对一定范围地址设置断点
" ~- A; Y, x. VRegister breakpoints是寄存器断点, M2 r' O; H2 @9 I
VDP Breakpoint Range是对VDP一定范围地址设置断点
1 I* n1 d* ]0 k: i4 \# x2 uVRAM breakpoints是VRAM断点1 W% ~) j2 v4 v4 A. @8 L, m
Go to address是转到指定的地址
/ c( m+ c# \' d+ r( h1 J$ pshow disassembly是对指定的地址反汇编
& q/ a/ N3 `: I3 _% Z& R o6 {Debug step是进行单步或N步调试
) w0 P7 e5 S9 E+ @( Z, JROM MEMORY是ROM Viewer
+ W0 t: Q% u+ N68000 MEMORY是RAM Viewer
' p9 i& k' W3 WZ80 Debug是Z80调试器. V* ~! K5 x' J6 L7 Y
$ l/ r1 ~- c3 l$ T2 iRead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)1 U; b3 C8 P5 q
) Q$ q; b8 W# v( e6 |3 j
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启) ]- d% k" v) y( w* v# y
% R) z4 U$ ?& |/ P3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
! p" d) @1 @) o$ p) @# d7 Z, h
( A$ a n% w# `" y; a" w, B( y+ T8 a( x4 b; X# w
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
( P9 H2 K/ K0 m0 g, W2 D+ G4 h7 `; B9 G5 R# [0 o; Q! `
$ @- u* W1 e. _! A% Z: D
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:4 `% L% J, M& a# f% z
2 [& k& P$ e( p# p {
; t$ ~" B2 c ^( I6 k4 h! c0 C
现在来分析一下:
* g/ k3 U( G) u9 S3 M& M2 ZA2=FFFFFA005 w6 Q, m( o: v. K# s! S. i
D1=00000001 _6 b0 K5 H; e% G6 B! i
0 h! ]! \) t$ J* a. s011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
9 n3 y" `1 d9 [9 G, _011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
7 k" B" h0 n) C9 U1 o2 y/ x9 u" h/ x, D9 j7 q7 J0 {! o# \/ k
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71& c- a T" V4 [3 o
% a1 i5 l- {1 T t. Z$ H/ n
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:6 L1 w, o* E# `# H. ]
5 @! \. R! Y# y0 l
' F9 x# r" Y5 |! r# c. r! H0 b! x5 z注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
/ y7 g% K$ b0 b; q* E/ L3 P# }; i2 O1 ~' e% V! _
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
7 X& J( Y8 s: h" z) a+ ?
! _& ]) V p' x* Y7 K3 V
( ?/ V+ A4 T5 D9 u7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:- R+ Z7 a8 M6 o
0 s: D9 d* v& w, ?9 B/ L3 `, U9 Y
+ A- d8 S4 p8 b4 d/ y8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
- Q2 }3 j6 Q7 }% O6 q/ y! ^8 K0 {: Y p7 r5 c9 Z
, T0 E7 Y* M% i9 G+ B3 _
疾风之狼, H0 P/ t% G$ W+ r( `
2013/09/13 : J- S+ }1 @7 F$ T4 J# v' z
/ k+ \0 T1 r V( X9 O7 k3 Z
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|