签到天数: 2172 天 [LV.Master]伴坛终老
|
游戏:SS怒首领蜂
" F! j f2 p& Q# \( @- ]" K+ K' d( [4 F- ?0 u) q6 [
使用调试器:mednafen
& S; t8 S9 q) r! e0 j5 b. F6 z" y2 F2 u+ Q- M- e0 ?0 ]
反汇编工具:IDA
% O0 I4 U4 s3 ?" }1 n/ `2 j0 y4 \/ \+ x& R S- o7 s7 P
16进制编辑器:winhex或其他16进制编辑器. |; u: [# G& n1 p1 U
- J2 F( U0 C) {) a5 F1 [2 fmednafen是多机种模拟器,模拟器是通过命令行方式加载游戏,当然你也可以通过前端方式加载游戏,关于mednafen的前端太多,请自行寻找。# n' P* L* ~) s7 e6 C) Q. ~; @
. }( k7 y7 ]. h$ R/ T5 E
关于SS CPU:) E$ ]6 F5 s6 i# |1 K
SS是使用日立SH2作为CPU,关于SH2指令集请自行百度或bing查找。
% O: W; |5 J! {; j1 d2 d
5 n: M+ u8 Q7 a' O1 S! b. X关于SS内存区域:/ H* H8 E9 [- v$ X w
LWRAM 0x00200000~0x002FFFFF
9 s& G/ \" t$ h4 ]
' V3 M3 m. r8 z/ P- s5 _# o ?+ B) ]HWRAM 0x06000000~0x060FFFFF
% n8 ^/ K7 H! ^) Z
5 I% ?* |) ^# c8 A8 l: @68K RAM 0x05A00000~0x05AFFFFF7 m1 R5 Q' p4 u3 e/ Q
$ r; w) g' D5 t0 n. }; M$ {3 y1.下载mednafen解压后,运行一次mednafen.exe,生成mednafen.cfg文件,用记事本之类文本编辑工具打开mednafen.cfg,查找全部debugger.disfontsize 5x7,全部替换为debugger.disfontsize 9x18并保存,不这样改调试器显示字体太小。
- g# E) M6 \; C" l5 Q8 z% {! p% u& m& [2 Q v# ~
关于mednafen调试器用法请参考mednafen模拟器目录下Documentation目录里debugger.html文档。/ h& I/ x6 f$ N$ S: i
4 l1 c/ A7 r# G0 }& Y
2.用mednafen加载SS怒首领蜂,进入游戏后第一步是查找1P飞机数,查找过程略过,我找到1P飞机数地址:0x060c0061" z# `5 S* `" s- J+ z. r
2 m3 e/ P8 A: r# n3.进入游戏后,按ALT+D调出调试器,按SHIFT+W打开写断点框,输入060c0061后按Enter完成写断点设置;
3 f- C" s8 v+ j" k% T) J- h) q8 M6 D, @5 a
( z% Y2 K+ A4 Q: N' {
, V! T- @4 U2 x% @3 i+ L
4.按ALT+D退出调试器,回到游戏中死一命后调试器发生中断,程序停在0603A8CA: mov.b r1, @r2
. X% \# ~/ Y/ e$ X: J o9 Y2 i/ X' Z# f" | f2 w; \8 w' P; y
x& _ e# n; h6 O0 L, K( n) s
l( W0 \9 [# Q5.接下来分析一下:9 e$ V1 e t# ]5 c: {
0603A8C6: mov.b @r2, r1 把r2寄存器地址的数据传递到r1+ T/ J$ {) N) x
0603A8C8: add #-1, r1 把-1数值和寄存器r1相加,结果存入r1寄存器8 v3 T) n1 e0 J d4 j
0603A8CA: mov.b r1, @r2 把r1寄存器的数据传递到r2寄存器的地址里, L6 d+ C1 w6 E6 A& E% u) k4 v
* B% x3 [+ Q9 Y6 K, C3 A6.只要把0603A8C8: add #-1, r1指令nop掉就飞机数就不减,SH2汇编nop指令机械码是00 09;
: d/ b% n, `) q3 x5 X/ x% o0 \- O& {
7.按ALT+3切换内存窗口,还记得前面说的关于SS内存区域吧,0603A8C8地址是HWRAM区域,按CTRL+→切换到High Work RAM区域,按D调出Dump Memory框,输入3A8C6 3A8E0 SS_dump.bin后按Enter,之后会在mednafen模拟器目录下生成SS_dump.bin二进制文件;
3 y1 g) s- E; {# W6 n+ _. y2 X* c# G! ~# i
& {& H5 `8 E$ p5 N* r* o
' K5 T9 G) z& k8 f4 e
8.用IDA反汇编SS_dump.bin结果:" P7 g) b# a- H. j: ^% I6 m* w: n
, g5 |( }" x" q2 YROM:0603A8C6 61 20 mov.b @r2, r1, @( U! D# W% H* A7 g( G
ROM:0603A8C8 71 FF add #-1, r1' t2 f+ {. G2 d
ROM:0603A8CA 22 10 mov.b r1, @r2- H' m" `3 S: P- @) E' g' g
ROM:0603A8CC 61 1E exts.b r1, r1; M; w3 Q p9 ~7 `: n! H" m' R
ROM:0603A8CE 41 11 cmp/pz r1) } X# X) p; c2 ?
ROM:0603A8D0 8F 07 bf/s h'603A8E2. n W9 z4 M, F, s1 i% \
ROM:0603A8D2 E9 00 mov #0, r90 C, Z, \8 Y3 z, A
ROM:0603A8D4 61 32 mov.l @r3, r1. a+ y: \9 N0 E
ROM:0603A8D6 D2 3E mov.l #h'FFFFFFFF, r2
/ n! [2 H9 I% h0 P: JROM:0603A8D8 21 2B or r2, r1: d ^+ U5 x$ R$ p/ A$ r8 `: F$ V
ROM:0603A8DA D2 3E mov.l #h'FFFFFFFF, r2
- `0 [- f @# m" I/ D; l
9 E9 c# y5 W9 U* f4 c4 n反汇编结果得知add #-1, r1指令机械码是71 FF
6 o) D( b' \ u7 K. t9 }3 U% g' ~4 B2 @% t- I9 ^, [; J
9.用winhex打开怒首领蜂镜像,查找 16进制数据“612071FF2210611E41118F07E9006132D23E212BD23E2129A06523”;
! X" u) A) j4 N- I/ o' I
. A0 ^2 R' [1 b/ R/ ^! c c' j. V% U: v9 g- B0 `. N% b/ a
' P- R s' k& t2 n
10.把71 FF修改为00 09,另存为镜像,我不建议覆盖镜像,而是另存为镜像,怕万一改错了引致镜像损坏。
1 j( I$ b4 W+ t
" ^9 s" h% z" a, U0 [3 s, y1 \0 G; D. Y( S" r$ |" V- f
t V: b( N7 d5 n% P
11.用mednafen载入修改过的SS怒首领蜂镜像,如飞机数不减说明修改成功。/ E( h" F& K- O6 [ {+ g3 c( M% J
6 \* \/ T! M1 g1 \' h9 T
4 r" O: n. m: ^
: `# o7 C! n8 o. i2 f& w12.要刻盘在主机玩请先用ECCREGEN 1.41修复修改过的镜像EDC\ECC。
' E8 y6 C( c* M( ?# \" q1 j0 Q9 {+ F1 R
疾风之狼
6 p) F: U& r1 o+ j6 ?2025.06.29 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
4
查看全部评分
-
|