签到天数: 1995 天 [LV.Master]伴坛终老
|
游戏:SS怒首领蜂
& c( r! w/ b9 d7 M9 W, \, \% Y1 e6 c
使用调试器:mednafen2 ?1 B9 }) q6 U; r8 d9 ]% l
, i+ P4 r: |5 A
反汇编工具:IDA
7 L2 X5 a! p+ F' m% Y' H8 L& w
/ Q& z9 N1 g0 u9 O16进制编辑器:winhex或其他16进制编辑器
3 J: u' r1 F8 E& B$ k6 Z' x) W, x; Y( K8 _& m6 u- w, b
mednafen是多机种模拟器,模拟器是通过命令行方式加载游戏,当然你也可以通过前端方式加载游戏,关于mednafen的前端太多,请自行寻找。
; F- C: V( y8 Y& i6 y& V F& E7 M$ [$ R/ G% X
关于SS CPU:1 f0 {! k( Y1 C- U+ O5 O* z
SS是使用日立SH2作为CPU,关于SH2指令集请自行百度或bing查找。 : U9 \2 R& J k: u g
- m4 }6 C) Z/ F0 M: @关于SS内存区域:
9 J2 h8 h0 R% H3 A% T/ qLWRAM 0x00200000~0x002FFFFF
X8 Z2 o7 S: |. H# E k& k/ x' {& Q1 q2 O+ e8 T
HWRAM 0x06000000~0x060FFFFF
}( b. U, S. t9 M5 v$ l! F9 `* {% z' T; q/ L. [" X
68K RAM 0x05A00000~0x05AFFFFF
* x& f! P$ R, d0 q
$ F9 B J$ u, O; g1.下载mednafen解压后,运行一次mednafen.exe,生成mednafen.cfg文件,用记事本之类文本编辑工具打开mednafen.cfg,查找全部debugger.disfontsize 5x7,全部替换为debugger.disfontsize 9x18并保存,不这样改调试器显示字体太小。
+ e4 c, T5 e5 a a$ N! l
4 ^4 ]+ }. P5 J关于mednafen调试器用法请参考mednafen模拟器目录下Documentation目录里debugger.html文档。% [# K8 K% x$ R6 G
& y9 N) I) n4 H, f9 n3 z/ f: x0 y& _2.用mednafen加载SS怒首领蜂,进入游戏后第一步是查找1P飞机数,查找过程略过,我找到1P飞机数地址:0x060c00617 u9 M- T8 {* n! y3 N' \4 {
- r3 {# y7 z" H3.进入游戏后,按ALT+D调出调试器,按SHIFT+W打开写断点框,输入060c0061后按Enter完成写断点设置;; ]1 ]/ R1 j* |6 D5 w* d
8 _% a' u `3 p
) }9 z) n( \1 p
- D/ c& i& Z- ^9 p! K
4.按ALT+D退出调试器,回到游戏中死一命后调试器发生中断,程序停在0603A8CA: mov.b r1, @r2$ z9 Z8 d/ z3 n
- }; o9 x6 D9 h5 C; q
: v: s# [( N5 r, F) R
5 P4 D# U1 U' c+ a, X, L5.接下来分析一下:. R; K. n4 ]$ ^% U. J! J: x7 [# n3 p
0603A8C6: mov.b @r2, r1 把r2寄存器地址的数据传递到r1! @& B/ _9 y! q
0603A8C8: add #-1, r1 把-1数值和寄存器r1相加,结果存入r1寄存器
7 d* q5 ?3 R I9 `) |! F6 U0603A8CA: mov.b r1, @r2 把r1寄存器的数据传递到r2寄存器的地址里4 N; O+ m1 [ i7 R) {5 z
U x9 N. D1 O5 E& r6.只要把0603A8C8: add #-1, r1指令nop掉就飞机数就不减,SH2汇编nop指令机械码是00 09;
, |% d3 I0 E7 H0 b+ t2 K c
7 y5 b8 C% f9 a& L7.按ALT+3切换内存窗口,还记得前面说的关于SS内存区域吧,0603A8C8地址是HWRAM区域,按CTRL+→切换到High Work RAM区域,按D调出Dump Memory框,输入3A8C6 3A8E0 SS_dump.bin后按Enter,之后会在mednafen模拟器目录下生成SS_dump.bin二进制文件;
+ ~/ j' h( h4 C, \2 T$ ]( P! Q+ K8 [+ w7 b
1 X1 b* v4 G1 o- x7 j
9 Z$ o% Z! B' l0 ^+ U$ Z$ s
8.用IDA反汇编SS_dump.bin结果:
0 P. }" l) P/ ^; |
1 |# k% }7 m* o* ^8 A# QROM:0603A8C6 61 20 mov.b @r2, r1- V# K! }* y$ r" C$ i
ROM:0603A8C8 71 FF add #-1, r1
% w2 @% i! D8 X; m( i% FROM:0603A8CA 22 10 mov.b r1, @r2
0 e' q5 D! M: I) ?4 z" mROM:0603A8CC 61 1E exts.b r1, r1( G1 Z9 j4 \5 @5 o- ~ M$ ~5 l3 z& ~
ROM:0603A8CE 41 11 cmp/pz r12 A2 f4 F3 d5 Q b W# E- M) R
ROM:0603A8D0 8F 07 bf/s h'603A8E2; z+ J, V O+ I( x( [: H* i
ROM:0603A8D2 E9 00 mov #0, r9
( {& Q; Z5 U/ P+ V" tROM:0603A8D4 61 32 mov.l @r3, r12 {, Y. I5 R3 d9 F: ?7 f
ROM:0603A8D6 D2 3E mov.l #h'FFFFFFFF, r2
I, [4 t7 k0 P! eROM:0603A8D8 21 2B or r2, r1: m1 k1 D5 ~. a7 U
ROM:0603A8DA D2 3E mov.l #h'FFFFFFFF, r2
. H w w0 f, o( L4 ^ M* R: N. v0 I/ [8 W: U" U5 [7 @- O
反汇编结果得知add #-1, r1指令机械码是71 FF% u& b3 S. q' ~
8 Y/ G5 q' v3 Z4 j U8 r8 b
9.用winhex打开怒首领蜂镜像,查找 16进制数据“612071FF2210611E41118F07E9006132D23E212BD23E2129A06523”;9 b2 t3 v( L* r: d: @" j
3 U9 [) G3 s4 @# _2 A" x
/ L& n1 r# n S* S2 T. \+ [ S
9 M+ _6 w" u9 w5 i c10.把71 FF修改为00 09,另存为镜像,我不建议覆盖镜像,而是另存为镜像,怕万一改错了引致镜像损坏。7 s7 G3 y: G6 B8 z( U. |$ U! c
* f5 B3 P& R7 h5 L# `5 {* T1 C& a1 ^
2 q& G1 f" f; ]/ y. c. s
% S, |8 D. ~' ^( u11.用mednafen载入修改过的SS怒首领蜂镜像,如飞机数不减说明修改成功。. Q% P' y4 m" ]% O) B, Z
- v) U8 g+ \7 C; ^, l% j% Y1 C$ |: i+ T" L5 r5 T3 U7 o
3 A& ]$ n* b$ Q6 `/ I. D z0 X5 c12.要刻盘在主机玩请先用ECCREGEN 1.41修复修改过的镜像EDC\ECC。
. m* ]/ J% H* ^; q/ E
5 ^- q+ L1 V) s2 y. W& w0 W疾风之狼+ V" t+ i% B, R, h" g+ }
2025.06.29 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|