签到天数: 2214 天 [LV.Master]伴坛终老
|
游戏:SS怒首领蜂
4 \$ Y2 q, Q, J6 C2 P
( F2 a9 S4 [2 O1 g使用调试器:mednafen) t& h F4 ]) V: c; G) D: {
9 H% x- M0 w3 Z) ?7 d反汇编工具:IDA
, x+ n- d1 k9 R8 C7 ~3 L: c5 Y& F0 v
16进制编辑器:winhex或其他16进制编辑器' F0 p) [8 b( h* P2 S
# e- @$ g* ~% q; Y# pmednafen是多机种模拟器,模拟器是通过命令行方式加载游戏,当然你也可以通过前端方式加载游戏,关于mednafen的前端太多,请自行寻找。2 N( r* J/ E& g4 ]3 `: T$ T
( @5 @" k& f7 ^
关于SS CPU:; L! W8 T P3 }( M. g
SS是使用日立SH2作为CPU,关于SH2指令集请自行百度或bing查找。
- l7 a6 ?" t, y/ \: n
F2 q8 Z' g, m2 o2 _关于SS内存区域:
; [) Q( A4 \( D t6 E5 g' uLWRAM 0x00200000~0x002FFFFF5 b2 E5 |4 ^4 y
7 ~0 s% t+ Q, t
HWRAM 0x06000000~0x060FFFFF! O" m; ^/ Y4 C, {0 t
; G& u+ M1 W8 f' g2 J3 M, C
68K RAM 0x05A00000~0x05AFFFFF
( C9 S( A- h" M: f Q9 q( l+ Y: ?3 V* t T. c
1.下载mednafen解压后,运行一次mednafen.exe,生成mednafen.cfg文件,用记事本之类文本编辑工具打开mednafen.cfg,查找全部debugger.disfontsize 5x7,全部替换为debugger.disfontsize 9x18并保存,不这样改调试器显示字体太小。
+ ~, l3 H, L9 b# W U, A& o% n2 u+ [* y" |" ~4 x* @ Z4 z, ^
关于mednafen调试器用法请参考mednafen模拟器目录下Documentation目录里debugger.html文档。6 b& v, I2 E6 N/ ]. t
; @( Z A7 G, r# {/ h
2.用mednafen加载SS怒首领蜂,进入游戏后第一步是查找1P飞机数,查找过程略过,我找到1P飞机数地址:0x060c00610 P3 s+ d! d4 `0 _0 N, o% }, u2 G
1 G) ]1 v9 @0 P+ ?6 T* r3.进入游戏后,按ALT+D调出调试器,按SHIFT+W打开写断点框,输入060c0061后按Enter完成写断点设置;
) d9 h# X7 e9 P6 P9 Z4 K G+ w$ G" ^; Q! T1 G
( e6 `! o/ c) {2 L" A) X8 f/ q
6 P* t) M `# Q! _: k4.按ALT+D退出调试器,回到游戏中死一命后调试器发生中断,程序停在0603A8CA: mov.b r1, @r2
9 S q2 Z2 x; W$ v% i
. @) \/ K7 a8 s- n; y0 @( r
' t4 ]" E' [6 \( B% m r
; @* N N9 S3 {0 a! _ f1 y5.接下来分析一下:$ l& ?2 m/ ~! n- d- u
0603A8C6: mov.b @r2, r1 把r2寄存器地址的数据传递到r1, W; A; F8 |0 A1 \- P, X- y
0603A8C8: add #-1, r1 把-1数值和寄存器r1相加,结果存入r1寄存器/ Z0 J6 a7 M5 W. l ?8 F$ \& D9 R
0603A8CA: mov.b r1, @r2 把r1寄存器的数据传递到r2寄存器的地址里
/ x* M! \, [+ c, j8 @) a* g; C) Z7 ~5 w0 d4 q+ ?3 i
6.只要把0603A8C8: add #-1, r1指令nop掉就飞机数就不减,SH2汇编nop指令机械码是00 09;7 J( n# F( e- k: ^5 A% u* r3 k: C
: E( {+ F. E. v' e4 T" \$ d
7.按ALT+3切换内存窗口,还记得前面说的关于SS内存区域吧,0603A8C8地址是HWRAM区域,按CTRL+→切换到High Work RAM区域,按D调出Dump Memory框,输入3A8C6 3A8E0 SS_dump.bin后按Enter,之后会在mednafen模拟器目录下生成SS_dump.bin二进制文件;
* j' {2 P: b) m) c
2 u) L' q. H& S. Q* d c* A
- ~4 B5 K- l3 P- v* A, }9 s# d9 ~! S) Q* x
8.用IDA反汇编SS_dump.bin结果:
& h) S/ A- b2 a6 a
+ h/ b# \% I* X, C% ~ROM:0603A8C6 61 20 mov.b @r2, r1; j5 L8 X* K/ c$ V. i
ROM:0603A8C8 71 FF add #-1, r1
% Z/ E$ g2 `' lROM:0603A8CA 22 10 mov.b r1, @r2) S# d, d5 S5 n& { r
ROM:0603A8CC 61 1E exts.b r1, r14 q) P) v" @2 N1 L0 J4 n
ROM:0603A8CE 41 11 cmp/pz r1
& ?' F5 s5 n) S! x' ~9 k0 bROM:0603A8D0 8F 07 bf/s h'603A8E2 Z& x' y" J+ ?$ X. \! ~8 n6 p. d
ROM:0603A8D2 E9 00 mov #0, r92 ?8 r; E; E$ }/ O: a9 f
ROM:0603A8D4 61 32 mov.l @r3, r1
6 h( v! h l0 O: D" _ROM:0603A8D6 D2 3E mov.l #h'FFFFFFFF, r2, V7 x) e Z, {* Z! u
ROM:0603A8D8 21 2B or r2, r1
! Q8 ^- v4 L+ u+ N. T- xROM:0603A8DA D2 3E mov.l #h'FFFFFFFF, r2" f9 w& z4 Z/ h& o4 j4 C
; U( ?) q3 ^+ v) X
反汇编结果得知add #-1, r1指令机械码是71 FF
. i( g6 ~. x! E' m% }
) D8 c6 n+ |% _! t8 _0 Z0 [9.用winhex打开怒首领蜂镜像,查找 16进制数据“612071FF2210611E41118F07E9006132D23E212BD23E2129A06523”;
5 {# p3 E8 n! C5 w: o. E# z# t, |
$ u6 C. t0 h% i1 }, _2 k
- i+ c& C$ u* p2 b+ G% U6 x
10.把71 FF修改为00 09,另存为镜像,我不建议覆盖镜像,而是另存为镜像,怕万一改错了引致镜像损坏。
3 f# e/ }! N% B1 A" o: _, s- b
( Q. R8 K5 c) a5 O2 b& \8 {) Y8 V- \2 q: _- s
, e/ S& `. J1 g2 G3 \11.用mednafen载入修改过的SS怒首领蜂镜像,如飞机数不减说明修改成功。' C+ m4 j- Z0 @& q2 k
- g, i- [5 ]8 M, z3 m1 D y: l z
# J8 k. w; a# @$ O+ r
; a5 l8 C8 O! t
12.要刻盘在主机玩请先用ECCREGEN 1.41修复修改过的镜像EDC\ECC。
. I3 x7 t% N. e/ ]7 P+ H) K, R( u! N; w1 a* @7 q; `
疾风之狼
+ s, q: _6 f8 i' G1 Q5 a! [% R2025.06.29 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
4
查看全部评分
-
|