签到天数: 1770 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器 a% i9 }, s( J+ [. A2 T' X
2 b. ~, x. J2 O. E ]REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
- @6 m- f2 j: F" p* n v' c8 s9 X: T8 X z4 I( Y2 \
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
1 X& G) U. s" h9 K$ C2 A1 l. ]3 L
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
7 Q U2 p! V5 n' m, J! C
4 F& e7 z7 P6 G# f1 E8 _以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
9 ^' y! y/ B! V/ s
% m) ]0 g# P q9 i. I3 x; ^1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
) R% z% x- b Z( w- E# t: T: S8 w4 q5 [1 h5 o# ~! `
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
( f- M; M) c) t7 u
, k! c) a5 P% a9 Z3 m/ }
! L7 C! e; o: n左上角框是显示汇编指令,右边是寄存器显示
/ x2 c$ q2 h9 G+ X, C
- O. o( [ \0 n1 V! V) LAddress Breakpoints是地址断点
2 x+ [. W+ c- F7 QAddress Range是对一定范围地址设置断点
0 p) b' m4 y, O, C: @0 M/ RRegister breakpoints是寄存器断点5 h% z, e, k) C" s/ E
VDP Breakpoint Range是对VDP一定范围地址设置断点
; ^4 _1 n) Y" F/ f, h: {0 vVRAM breakpoints是VRAM断点% K( [' F/ {: k9 y" b! W+ r( E
Go to address是转到指定的地址' j, Y- v+ K$ K9 D& L
show disassembly是对指定的地址反汇编# M, ~& L* \& w9 Y9 Z3 V8 E" n
Debug step是进行单步或N步调试6 a+ Z+ t' X( y: [6 y5 k N2 I( V
ROM MEMORY是ROM Viewer
# r5 Y( }9 o* t' x' F% i: {68000 MEMORY是RAM Viewer+ H' L& m* e4 Z% X3 x( w+ f& t; C. Z
Z80 Debug是Z80调试器; M% v' U- e/ t- P" q: C
. s3 P; r! Q$ `/ _% K% MRead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件), I2 V+ Y) u/ P% W2 F
* j/ i! e- j2 X
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
& u) ?( K$ P3 ^' D+ Q4 i$ G1 ]( g
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:) A0 V( j0 X$ U+ j8 V4 |. R
: x5 A; Z6 q4 A) [! @+ l
3 D0 H3 n% l' B7 q+ N* J1 ?
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:* L- R/ E* U( |3 K4 m2 {
4 y0 ~9 G' N# X1 S% V
0 q2 v* B8 a% o' I; c" G- \, a指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:/ [2 ~, Z1 _) V5 ~7 j' P* k
1 [# B9 k2 x+ O' `
) F: }8 z6 y# c* ]现在来分析一下:8 n2 f3 U, G. q; V
A2=FFFFFA00( ^- D# p" ?; y/ k- \
D1=00000001
& c/ G' {3 e& l+ J/ T
# U ]' A) i$ }- ?$ o3 o$ x! G/ P3 ~4 f011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D' L% ^0 d6 W0 f2 ?: b+ D
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
8 l& N, U6 j% P, j& X5 f
6 `; ]8 Z# K# ?, F只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71 v4 u6 ]- W. J# `# x& b8 p
+ m% j2 Z. R& K$ P+ n: l, M+ b6 v2 l5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:" ]8 }3 y& `2 d t7 `% a, x
" a0 S2 m( x0 W. j* b- j" y
8 D! J: U1 ~4 ^注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
1 |) E) C) }9 b0 `. \. _% c2 j) _* g8 E, Q( S
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
1 i4 V K, j6 e& v2 R* Z1 F3 V5 K0 g/ i
) c$ Q. ?2 |0 V- u' B6 }6 E7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
- [2 ]2 ?# s; V: f' Q* d9 C
( X B. X1 |1 h6 @) p. v- Y# F9 Y" Q4 I2 w* Y
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
. p$ X5 N% u0 r. m" W/ A5 F' c# P. g5 |! r+ _6 V' H; T) x
5 ?! _" s; T$ Q. \
疾风之狼# x& s" M/ Q; F; j
2013/09/13
: T4 q* F$ c! Q# f* J. Z: I/ N: U+ C6 {4 z P
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|