签到天数: 2192 天 [LV.Master]伴坛终老
|
游戏:SS怒首领蜂/ j. k* Q. A, L; i0 J* d6 C
& ]& u0 j' l/ v' C
使用调试器:mednafen, S; ~4 l( c5 M$ i$ ^
H( M4 f9 C( r$ d8 z6 o
反汇编工具:IDA- ^: [3 r) o/ J# Z& B. {" I6 S
0 S% M, W* O* u, B: S6 Q3 U' D
16进制编辑器:winhex或其他16进制编辑器7 J$ I$ M! X. U- J" h, y' X8 p
$ c& Y6 V: V7 e( H) t7 u0 v" ]
mednafen是多机种模拟器,模拟器是通过命令行方式加载游戏,当然你也可以通过前端方式加载游戏,关于mednafen的前端太多,请自行寻找。
8 P& M- @, u& K$ a T3 h$ |0 L# k( }2 D, y) {, Y7 ]
关于SS CPU:
. [, m/ Q9 ]2 E4 D# J# {SS是使用日立SH2作为CPU,关于SH2指令集请自行百度或bing查找。
$ N7 V2 [4 L2 d& Q8 h6 W' D1 x4 t4 k6 g" w9 O" h
关于SS内存区域:0 z( b$ V+ }2 |5 K
LWRAM 0x00200000~0x002FFFFF+ u0 E7 w: g5 E s) S
% }! p K6 O7 ?9 [5 `6 {( S$ \+ qHWRAM 0x06000000~0x060FFFFF
& B: c; K2 y, \8 r- g- M
) o& ]/ s) {/ ]4 x5 w& |- R+ L7 v68K RAM 0x05A00000~0x05AFFFFF
, N" |; ^: M" p, S4 C9 b2 h4 E' n
) U& r2 }) ]% y0 U9 P3 F- V1.下载mednafen解压后,运行一次mednafen.exe,生成mednafen.cfg文件,用记事本之类文本编辑工具打开mednafen.cfg,查找全部debugger.disfontsize 5x7,全部替换为debugger.disfontsize 9x18并保存,不这样改调试器显示字体太小。
8 Z* B# Q* \# k# b9 C Z( y; v) q( x, _0 }' U) @5 C
关于mednafen调试器用法请参考mednafen模拟器目录下Documentation目录里debugger.html文档。
3 J1 P, s- |' ] G6 g3 |% t- ]% ~% C3 G
2.用mednafen加载SS怒首领蜂,进入游戏后第一步是查找1P飞机数,查找过程略过,我找到1P飞机数地址:0x060c0061
. C6 i# i @! A! a, R
- G' E! \/ s* W3 G3.进入游戏后,按ALT+D调出调试器,按SHIFT+W打开写断点框,输入060c0061后按Enter完成写断点设置;
3 k8 C; A5 l( b# |
! H3 H' P* J, i8 C5 @) N0 P1 M2 s J! v( }) K3 e: J0 j
1 a/ \7 k) n0 I% M$ h j4.按ALT+D退出调试器,回到游戏中死一命后调试器发生中断,程序停在0603A8CA: mov.b r1, @r2
* X6 _* w8 ?( ]. s$ n7 v. j- |/ |0 J1 D- I0 E/ P
: L( ?9 d2 ]$ E- o Z
# G$ e, h" P$ }. N
5.接下来分析一下:; b' }. a. I; c
0603A8C6: mov.b @r2, r1 把r2寄存器地址的数据传递到r18 l7 k9 j; b+ o5 ~" K: J
0603A8C8: add #-1, r1 把-1数值和寄存器r1相加,结果存入r1寄存器
6 B$ Q* E* O9 d0603A8CA: mov.b r1, @r2 把r1寄存器的数据传递到r2寄存器的地址里9 U# J% Y( ^% ] Z0 |) A
& R D0 l) U. {7 j; j5 M# n
6.只要把0603A8C8: add #-1, r1指令nop掉就飞机数就不减,SH2汇编nop指令机械码是00 09;
' e3 |# J; O. X) G4 c1 B) G* ?. u( Z+ E4 h
7.按ALT+3切换内存窗口,还记得前面说的关于SS内存区域吧,0603A8C8地址是HWRAM区域,按CTRL+→切换到High Work RAM区域,按D调出Dump Memory框,输入3A8C6 3A8E0 SS_dump.bin后按Enter,之后会在mednafen模拟器目录下生成SS_dump.bin二进制文件;
# m" r4 O. g# I& |
' s% C8 a: D: x4 Q" P$ y! ~- o; k0 }1 u, Y
& {4 X1 ]7 _. h3 I \1 D8.用IDA反汇编SS_dump.bin结果:
9 j. i+ g$ X* c# q. Z1 V1 ]4 s) \8 O V( R. @7 M3 j4 k" W
ROM:0603A8C6 61 20 mov.b @r2, r12 H5 L( ^. w8 H4 |4 u; I
ROM:0603A8C8 71 FF add #-1, r1$ c' e- |1 B7 G. K- h( x
ROM:0603A8CA 22 10 mov.b r1, @r2
2 x2 {! ~3 z$ D$ r, o% ?ROM:0603A8CC 61 1E exts.b r1, r1
0 n- O2 z5 O/ ]) x) d; zROM:0603A8CE 41 11 cmp/pz r1
% H' T! N1 X$ W/ i$ [: [ROM:0603A8D0 8F 07 bf/s h'603A8E2
% ~+ t5 X* K+ C& a. @9 qROM:0603A8D2 E9 00 mov #0, r9
G8 V1 B% h1 @+ @+ [! VROM:0603A8D4 61 32 mov.l @r3, r12 `1 x: S$ T) k, }; f7 k2 ]; Q
ROM:0603A8D6 D2 3E mov.l #h'FFFFFFFF, r2) ^6 T* n7 Q0 f. c" i7 D
ROM:0603A8D8 21 2B or r2, r12 D8 b# P; v/ u3 p2 \2 {: z. |* @
ROM:0603A8DA D2 3E mov.l #h'FFFFFFFF, r2
% I9 h# \" i7 {' \
) _$ ~& ^1 _0 `% v& H, F1 F2 W反汇编结果得知add #-1, r1指令机械码是71 FF' V g% i, D4 ?5 [6 y3 G
a U! e3 P. K0 X F9 t
9.用winhex打开怒首领蜂镜像,查找 16进制数据“612071FF2210611E41118F07E9006132D23E212BD23E2129A06523”;
6 F# j2 q7 F, C/ l2 W4 |5 P% R- R+ c5 E
% @9 I! C' g; B: ~9 m2 b+ z/ o; Z* c/ B* y
10.把71 FF修改为00 09,另存为镜像,我不建议覆盖镜像,而是另存为镜像,怕万一改错了引致镜像损坏。5 B+ s, Q" W9 I2 z3 C8 j
! I5 v& v4 I+ ~9 `" h
! V: X; R3 D8 _* {8 y0 P! d! E' S8 k! v; p0 x, ~
11.用mednafen载入修改过的SS怒首领蜂镜像,如飞机数不减说明修改成功。; `. |1 o3 g' Y5 A I9 D7 I2 y3 }. v
0 V0 n, h: n9 ]7 Q3 Y6 J0 `
3 q4 J; w- Q$ Q* i2 K! {& K5 X
5 z4 Q9 D# H: n a* ^/ F+ l12.要刻盘在主机玩请先用ECCREGEN 1.41修复修改过的镜像EDC\ECC。
8 f2 _; S" }/ z2 s, n
) v f4 r1 W q+ \2 {& A4 o疾风之狼4 s# i" s* O2 L
2025.06.29 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
4
查看全部评分
-
|