签到天数: 2042 天 [LV.Master]伴坛终老
|
游戏:SS怒首领蜂
& n0 a; d- ^, F, ]; {( t" r: s; @( u0 C) ?
使用调试器:mednafen2 d8 `2 D0 ?. }4 ?; }! |
, E: f: u3 _8 @, _8 j+ S% \4 Q反汇编工具:IDA0 Y& z q8 L) y1 b" _3 t
# {3 ]8 r7 v. V0 Z6 Q) o7 |3 C
16进制编辑器:winhex或其他16进制编辑器
2 K0 x# R* r& ?0 O- E! t, w
; o# D+ q8 }# [5 L1 A$ i% s0 kmednafen是多机种模拟器,模拟器是通过命令行方式加载游戏,当然你也可以通过前端方式加载游戏,关于mednafen的前端太多,请自行寻找。
% P# m- T- ]$ [! Z2 G* k5 ]& o2 v2 j( u# A$ t
关于SS CPU:
! a8 E0 r- N& ]4 W2 y6 VSS是使用日立SH2作为CPU,关于SH2指令集请自行百度或bing查找。
8 T Y$ o6 ]5 Z, G
o1 j6 N8 @, O# n9 T9 G关于SS内存区域:
/ C- b: A1 m5 U; FLWRAM 0x00200000~0x002FFFFF
2 x- M w2 c9 n
1 m# x7 _: u$ F! p) ]& SHWRAM 0x06000000~0x060FFFFF
2 S6 C2 `) x1 H% T" F0 s
5 U# J* e: r' r+ u9 A5 _68K RAM 0x05A00000~0x05AFFFFF
" t9 ^: }# L8 z% r- ~. }6 k0 n+ W. J7 B( E* w1 [
1.下载mednafen解压后,运行一次mednafen.exe,生成mednafen.cfg文件,用记事本之类文本编辑工具打开mednafen.cfg,查找全部debugger.disfontsize 5x7,全部替换为debugger.disfontsize 9x18并保存,不这样改调试器显示字体太小。
6 }) G* D# T* J" d
! ]# C7 f1 |/ Z2 u! w关于mednafen调试器用法请参考mednafen模拟器目录下Documentation目录里debugger.html文档。: M0 J6 y% f+ ]6 o
5 y3 ^( W: Z% B) I/ g0 U7 X: R
2.用mednafen加载SS怒首领蜂,进入游戏后第一步是查找1P飞机数,查找过程略过,我找到1P飞机数地址:0x060c0061
0 x0 y2 V5 u+ s* n! g- E- R% P& h+ Y/ W
3.进入游戏后,按ALT+D调出调试器,按SHIFT+W打开写断点框,输入060c0061后按Enter完成写断点设置;
2 _3 j; J6 }' K, C6 C5 V
' K7 N; [. T) Y9 c1 e' q1 U8 `% u: X- B! U) ?
3 X& s1 V, L* v7 I4.按ALT+D退出调试器,回到游戏中死一命后调试器发生中断,程序停在0603A8CA: mov.b r1, @r2
$ u, D. B3 j- N C, y" u5 v; x
- M; W/ T8 _ v) K$ o3 T+ Z3 r/ b4 R) a1 f, c2 K! W9 O
4 w5 v4 j5 ~0 x: W F% g5.接下来分析一下:
# K! r6 T ?) E4 S' c O; T0603A8C6: mov.b @r2, r1 把r2寄存器地址的数据传递到r1. W$ E. m) r3 B( i
0603A8C8: add #-1, r1 把-1数值和寄存器r1相加,结果存入r1寄存器$ h% ~6 g$ r8 J9 P* I* V
0603A8CA: mov.b r1, @r2 把r1寄存器的数据传递到r2寄存器的地址里
1 l' A7 L: _) V
6 K& \% b: g* R' \4 S6.只要把0603A8C8: add #-1, r1指令nop掉就飞机数就不减,SH2汇编nop指令机械码是00 09;0 K' i/ K b. ?& L7 B" j- T6 a* }
9 `% ?# M/ m8 K
7.按ALT+3切换内存窗口,还记得前面说的关于SS内存区域吧,0603A8C8地址是HWRAM区域,按CTRL+→切换到High Work RAM区域,按D调出Dump Memory框,输入3A8C6 3A8E0 SS_dump.bin后按Enter,之后会在mednafen模拟器目录下生成SS_dump.bin二进制文件;, Q0 G) [/ `5 Y
+ {/ b7 |% ~& }* z
' n# L: R5 `+ }6 ^2 H% ]% F; G, x3 o' D' Q x) o' ^) B5 v
8.用IDA反汇编SS_dump.bin结果:7 F7 w/ E9 l% w) Q
" c! t2 t) D ^0 h7 e+ A
ROM:0603A8C6 61 20 mov.b @r2, r14 ~: T; T& Z8 I9 l @* P! E
ROM:0603A8C8 71 FF add #-1, r1+ P$ I0 x; n6 m; [; G
ROM:0603A8CA 22 10 mov.b r1, @r2
+ p& B. C, d# N6 \4 `- w1 ZROM:0603A8CC 61 1E exts.b r1, r19 v. o! ^1 B$ p( K& K* H9 t8 h
ROM:0603A8CE 41 11 cmp/pz r14 g0 q+ u e# _4 ~$ t( A+ ]
ROM:0603A8D0 8F 07 bf/s h'603A8E2
3 z' Z! L7 g' j, d& t. ~' z, @ROM:0603A8D2 E9 00 mov #0, r9
( e5 i! l5 W3 W; X$ o! qROM:0603A8D4 61 32 mov.l @r3, r1
* T! ~; w0 l+ G8 Q. [% U3 M+ CROM:0603A8D6 D2 3E mov.l #h'FFFFFFFF, r2% R' @" l) b/ F
ROM:0603A8D8 21 2B or r2, r1: M ~, A# R G* a- e* t* L
ROM:0603A8DA D2 3E mov.l #h'FFFFFFFF, r2
- C: |4 ^/ g; C9 v
) N; Q9 b2 m1 y; v& E反汇编结果得知add #-1, r1指令机械码是71 FF3 T( b2 Q9 n6 f
. @* J9 T, y3 g
9.用winhex打开怒首领蜂镜像,查找 16进制数据“612071FF2210611E41118F07E9006132D23E212BD23E2129A06523”;3 S3 D- i* q8 h w7 X
3 |3 b. ^$ i/ I& d1 X+ x* D5 B" z" F. B
3 S" @* I* F6 o# h10.把71 FF修改为00 09,另存为镜像,我不建议覆盖镜像,而是另存为镜像,怕万一改错了引致镜像损坏。. a4 W" |- d w1 a& \+ o
& L1 q4 @% a( b V% t, B
) q9 n0 X4 T; E* m* A! o
, B+ {. X1 B! h4 W- K11.用mednafen载入修改过的SS怒首领蜂镜像,如飞机数不减说明修改成功。
/ | c w4 h; X4 Q# j8 i5 R
' l% q. [$ [' x0 Z: H+ p+ W
% R/ V0 j) i) i* B& V) O* A. P& U8 x8 Y
12.要刻盘在主机玩请先用ECCREGEN 1.41修复修改过的镜像EDC\ECC。
% G/ [/ ]0 n1 I5 m* q( c; B& @* {( a$ z) n( d
疾风之狼
# O5 v: ~" Z( v# Q; ]' V2025.06.29 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
4
查看全部评分
-
|