签到天数: 2109 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
! F* {* R* |+ q8 D9 d# d4 L, i* @1 Q
% i g8 R: Q, r! A. f) fREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html$ n$ y5 @, U# J2 o# T
$ W, @, q" f( E6 h" B! b以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
4 x- l5 _' g8 X4 Z! O* ]) {" v: _6 ~2 j0 d/ F& L* B
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
- @: G) [9 S5 s/ l/ r' h& m+ L
# R5 P& E0 i0 @8 H2 D, H' X8 G% ]以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减5 z- Y! I1 Q! x$ o) {! m4 F) t& L
) v- G/ x9 I5 j( z
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。/ P' H) m$ |* P( P
- T8 |9 D4 ~, ?% }9 X3 D& c; F
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
- r) a0 k9 G. e% M" b
! ~! v+ T( k# k3 i9 {: \/ R# @/ ~( w; [7 j9 ]
左上角框是显示汇编指令,右边是寄存器显示
+ }. n8 ~& r0 C% ^) R+ G* T
; P+ z) C: w5 Y7 h2 fAddress Breakpoints是地址断点
7 |+ R8 f2 i8 w' E/ xAddress Range是对一定范围地址设置断点- ~, p1 d% L" d
Register breakpoints是寄存器断点
* M0 I5 U2 z/ ?2 R% Z9 l3 XVDP Breakpoint Range是对VDP一定范围地址设置断点
+ g& E' N- V2 N/ V. A1 uVRAM breakpoints是VRAM断点
" O2 r0 K" o. {; q1 D# \8 w5 {Go to address是转到指定的地址
7 k [8 U, z: @) G' N4 v9 }8 |show disassembly是对指定的地址反汇编( v" z& ?5 u7 g) A
Debug step是进行单步或N步调试
% ^# Z& y7 p$ q- P5 v8 lROM MEMORY是ROM Viewer
9 ], B" J8 M. y% @. t9 Q7 T68000 MEMORY是RAM Viewer
* h' D5 _1 G7 P OZ80 Debug是Z80调试器2 Y5 @. Y: o- \: f- j; U5 q, T9 ]8 U
& c) W' H# E& m$ b* n# m
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
+ C% F9 i* u# _3 H" m4 ?
) A, M; `+ k, g9 A) IRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启" P5 ~8 ?, T6 ?/ d" o2 T/ [9 b' U1 ]
2 _; \" W" T7 j+ ^" d* R3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:6 q9 A2 @4 R' Y/ m- N
! z& c# C, r" {1 e' D, |
* R4 E; x0 D0 G. ~4 x4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:; w5 Z3 S6 h' h; {. L. {. ?* R
- b1 t% b1 t" ]0 r5 j: T
+ \0 ^' x* b7 D/ P+ r( N3 T指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
* h3 N" P# I, s: k3 b7 m1 b
+ t* C( ^/ x6 Z+ B( [. V" B8 x, B/ i
现在来分析一下:0 e% k9 v9 p+ D/ F! ~. E
A2=FFFFFA00
# `8 U& J( j3 t+ nD1=00000001: d4 Z% h, t% v' @
# K9 j W8 z/ h2 o011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D* C% f2 t1 \3 g! a
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
6 N6 R2 n- d& p4 b! ~$ [
3 s7 P# ^% I$ I0 c% l7 w/ T只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
! m. k5 G S) ~* a* Z, K1 H' `) G2 e
8 y+ u' S( e! l3 t0 `4 L5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:5 s, r9 F" u# s& w$ \1 ^
. }4 o' h9 ^' j' h' A9 O: Q
( i0 `" B& ~: i注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。, c! v6 Z" a: L$ V( T# x2 q( c n
, A, o" `; P4 l# b5 B/ |# Q6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
3 X$ S+ o$ K( P4 n' j! J+ j- v# x6 N' i3 {1 P" {
: ~4 W! X8 P, u% @1 J3 F# Y
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
4 s2 A8 V( ~0 _+ T8 M1 J P& I# I6 S& h$ E/ l
( F& W& t' P# r( _* k, N8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
. a! W; V* Z0 t( F+ C# y9 C# k0 h5 w# i$ Y o& g; @% z& L; C4 N7 r
: w. J6 e0 r6 B; x1 j3 B6 y
疾风之狼* u3 G; R; ~+ R; e
2013/09/13
6 a' ^( f S" S! s6 h( i! O: I" K- W
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|