签到天数: 2032 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
- u( T9 x: D, H2 D n# L% H6 O1 ]* {8 F P! i+ d
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
& _6 S% W6 t3 \- A! K! l+ O" L
( F$ E, w: F) n8 G以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
/ y' h+ N; y8 K( e( k- @6 r# \# K" T6 ]
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
; P6 I# }5 ?2 p5 O, p
- b* N" I5 }& r) Y* @8 z8 y8 N以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
( f5 e: z2 l; D K! S7 E# ^8 d5 W/ N+ F7 q& f z( K" e
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
' E& ]5 f: a5 E( J/ _4 z( N* Y$ I( c: _+ D. m7 E
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:+ r1 A* I" C. s
1 q$ n. m; n# c5 D; v' N6 @
9 E- T! l8 b& e5 S, Y3 {5 ~
左上角框是显示汇编指令,右边是寄存器显示
% @7 v, X& R" g) Z, _) }* e7 N# H" Q9 T H% k& n9 U8 v
Address Breakpoints是地址断点
4 N3 V' `* I: {1 M9 w6 WAddress Range是对一定范围地址设置断点: |# j0 b. ^5 q$ u- \9 i: I1 s
Register breakpoints是寄存器断点
* }7 M$ m# Q. d2 G# B/ ZVDP Breakpoint Range是对VDP一定范围地址设置断点; _1 v: }8 V# W9 V* x
VRAM breakpoints是VRAM断点
; W6 \$ V' m: x! |Go to address是转到指定的地址
, F1 o' m, y, \. \show disassembly是对指定的地址反汇编4 Y3 ]& x: y U% Z4 {* K
Debug step是进行单步或N步调试* o1 c( A/ s0 l4 Y# N- N
ROM MEMORY是ROM Viewer! B: l Q# x) o. h
68000 MEMORY是RAM Viewer
6 L- u0 n3 X: W! aZ80 Debug是Z80调试器& b" g! A8 f7 N" }9 u" r
! M. I3 |# }: Q+ B9 FRead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
' b8 \) w# z5 B3 |5 @; i9 V/ z$ _! Z1 z) e7 T" o
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启! u3 e x. v: E, U4 n
: Y) ~+ X" J9 J2 }- G3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
: t7 [& \8 g" H d; ^6 O9 H! I |0 E6 h, ~& C3 M8 d T h: S% R6 z
* L; s+ p& C% p4 A: F$ a
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:$ D3 K2 X3 Y4 r1 |8 Y
q: b" F& g y- P& g& y
% j! y# v) ?/ s) E, a7 ]指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
; ]& w1 M4 g, a( `$ f4 F+ Y$ Z" I# M9 `
. W4 d* j1 Y6 `- Z4 E. D现在来分析一下:1 x; ]8 g5 _- i- ]5 I
A2=FFFFFA00
( Z! n. m4 G2 H7 }2 WD1=00000001
0 n* L. ^) R3 r" e' c7 |/ s1 A6 Q6 _$ k- a r- p, f G% y" r7 X& f9 [5 R
011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
! s: ?' }; i, Z( D) i011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器3 Z- }( n- ~$ g& o d2 T
* @: @7 D; b4 J5 H( M只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71( a, `( X6 ?; M. z; C3 h+ \$ c
- n" [/ ~. `1 O
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
! n* @" I+ Z# S: N# C: t( s
5 E3 y2 A1 N/ _7 Z, X. B. g7 X, P( M: R2 `8 x5 k( b
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
% ?. ?1 O# X% t
. _, l8 J4 J# j4 q0 u7 d6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
; C1 g0 p( a. b6 g: ^8 k0 u6 U0 [- O
* X' f" L$ O7 q" S
& |! `2 Z/ k+ v4 R$ {7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
7 B$ y ^+ G- z: [) C$ E, Y
; \0 B9 ~5 z, n9 R! g$ q4 ^( m6 h% {1 k1 z1 C
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:" ^' u) q$ `* l
" O" _6 F' {! B y; _& S* o; C& E% N. j% _7 m6 \
疾风之狼 b2 L% j. z. q2 N) k
2013/09/13 % K+ q" e2 p, t5 w! U
# V. n3 K8 k/ E. n3 x, X$ X
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|