签到天数: 2180 天 [LV.Master]伴坛终老
|
游戏:SS怒首领蜂
- m6 A/ ^" A' O, f
7 F' `) M, h% O2 i& c& T& E' ]* ^使用调试器:mednafen
, C) F; F2 o0 g/ Q0 a7 @+ w$ t: w R# n; D$ T3 o& I$ A& h! R
反汇编工具:IDA
0 d* h8 A' m' h" S9 Z4 f w, {$ v* y3 t. [- M& G
16进制编辑器:winhex或其他16进制编辑器
+ }* Y/ i) k. o; M) A
) E! v+ G+ ^. b% ]% lmednafen是多机种模拟器,模拟器是通过命令行方式加载游戏,当然你也可以通过前端方式加载游戏,关于mednafen的前端太多,请自行寻找。
6 ^6 r$ i* g4 b# p
+ M# }3 B( ?! n; @2 M关于SS CPU:
4 f! s: I8 @. t8 Z2 K% o wSS是使用日立SH2作为CPU,关于SH2指令集请自行百度或bing查找。 # e) X( g9 w# P
/ a) ~% i- Z5 Z8 j
关于SS内存区域:
& o. b8 @9 d) o$ K+ j# ILWRAM 0x00200000~0x002FFFFF
7 K+ Q$ v, D4 J- l% n% O/ T. C/ x' D( W' ^8 s2 V- x) K
HWRAM 0x06000000~0x060FFFFF# V3 y0 V( [9 B2 V4 H
7 M! u( k/ j5 c8 o68K RAM 0x05A00000~0x05AFFFFF
- A9 G/ W( Q1 `9 @$ F6 f& a* k+ N3 I6 D" h5 ^5 `1 B# H
1.下载mednafen解压后,运行一次mednafen.exe,生成mednafen.cfg文件,用记事本之类文本编辑工具打开mednafen.cfg,查找全部debugger.disfontsize 5x7,全部替换为debugger.disfontsize 9x18并保存,不这样改调试器显示字体太小。
9 f& o, l, F" y& Z; D
' v8 {: I* q( N, Z0 |/ U关于mednafen调试器用法请参考mednafen模拟器目录下Documentation目录里debugger.html文档。
; [+ e+ s7 i. ]4 @0 |# E6 s
, z% ^& l6 G) g0 A2.用mednafen加载SS怒首领蜂,进入游戏后第一步是查找1P飞机数,查找过程略过,我找到1P飞机数地址:0x060c00615 o ? s7 s5 ^) b. _5 N$ d
2 I: b: H, A: _( x/ g _' h
3.进入游戏后,按ALT+D调出调试器,按SHIFT+W打开写断点框,输入060c0061后按Enter完成写断点设置;
7 Y; P# X6 [. A+ x$ w! z2 q* z' h
5 Y& L7 | P3 i. F) k
3 S& c9 `( t" X4 l0 r2 [* k- r; F' t: l7 {6 ]
4.按ALT+D退出调试器,回到游戏中死一命后调试器发生中断,程序停在0603A8CA: mov.b r1, @r2+ l$ d7 y+ {; R0 f m
& T0 B* L6 |1 J- {: _$ S
; x y' G# [# |3 \2 [4 T6 m+ \+ M; x: G
5.接下来分析一下:
4 C" p3 z6 R4 l6 X( ~6 S0603A8C6: mov.b @r2, r1 把r2寄存器地址的数据传递到r1
7 V# a! o- q# J0603A8C8: add #-1, r1 把-1数值和寄存器r1相加,结果存入r1寄存器
* S" k& C% ?: x. [; B& @$ k6 j# L0603A8CA: mov.b r1, @r2 把r1寄存器的数据传递到r2寄存器的地址里4 V# R4 D* i+ v
# X* ]5 a, s5 E* b6.只要把0603A8C8: add #-1, r1指令nop掉就飞机数就不减,SH2汇编nop指令机械码是00 09;9 D- U3 Q9 V# w- ]6 ?9 `
% N) O1 P9 u9 `" t7.按ALT+3切换内存窗口,还记得前面说的关于SS内存区域吧,0603A8C8地址是HWRAM区域,按CTRL+→切换到High Work RAM区域,按D调出Dump Memory框,输入3A8C6 3A8E0 SS_dump.bin后按Enter,之后会在mednafen模拟器目录下生成SS_dump.bin二进制文件;
4 w' ]9 w* m" u
, h9 g( |8 x1 r# E5 U9 w! t0 m2 y, m
+ v; v6 e. W6 }" N# L9 y" k2 i3 f. S$ C; C Q7 j0 J+ X0 L) T
8.用IDA反汇编SS_dump.bin结果:
( @6 M9 |3 z6 ~% @8 k9 z9 _* C8 B8 l X' u* K6 J7 e1 a$ z \
ROM:0603A8C6 61 20 mov.b @r2, r1
$ ^8 g) l1 J& }- eROM:0603A8C8 71 FF add #-1, r1
[6 \! |+ l2 A- CROM:0603A8CA 22 10 mov.b r1, @r2
5 n$ N+ F& t, w. ]5 N( rROM:0603A8CC 61 1E exts.b r1, r1
" x& X/ s% F9 c9 M, l# xROM:0603A8CE 41 11 cmp/pz r1
, J' m% W* m* T" j9 X* y! q; aROM:0603A8D0 8F 07 bf/s h'603A8E2( n) W- B9 J* D) k5 Y2 i
ROM:0603A8D2 E9 00 mov #0, r9
a& E2 M+ d5 K# t! g5 G. rROM:0603A8D4 61 32 mov.l @r3, r19 c& |2 a+ M" p) B* Y
ROM:0603A8D6 D2 3E mov.l #h'FFFFFFFF, r2, p/ S8 M k% h# H0 E7 ^( J
ROM:0603A8D8 21 2B or r2, r1
+ M$ ?/ X2 ~) E6 b: xROM:0603A8DA D2 3E mov.l #h'FFFFFFFF, r2- P2 h. W- X5 Q' n
6 ^6 Y% m1 l: h( k7 N- e
反汇编结果得知add #-1, r1指令机械码是71 FF
! I' y$ d/ y" {* S* p
( l$ r. D2 v) t1 p9.用winhex打开怒首领蜂镜像,查找 16进制数据“612071FF2210611E41118F07E9006132D23E212BD23E2129A06523”;5 D1 M+ ]) c. b4 r; y
5 F* C' D2 m3 e7 D. i& }; l
B' A+ _# I+ q2 M2 ]3 R# ^
% _& o4 R3 j! T! [. j7 F10.把71 FF修改为00 09,另存为镜像,我不建议覆盖镜像,而是另存为镜像,怕万一改错了引致镜像损坏。2 x: t0 [! E. ^- b/ p4 i
# O$ X! A( S6 ~& f6 f3 @
& U; M# ~2 C' i6 U( \) ^ j1 S" V7 d2 x5 n* Y' A s* C; a% p! @( Q
11.用mednafen载入修改过的SS怒首领蜂镜像,如飞机数不减说明修改成功。% \7 M% @0 J! m4 h
8 `0 x, ?9 ~- @
) _ }$ n. r/ j5 V/ m! R
9 f( {# s+ u! X$ f2 g) V0 A- J( V
12.要刻盘在主机玩请先用ECCREGEN 1.41修复修改过的镜像EDC\ECC。
' O1 i' ^" E* e& ]. s3 I" e, I/ A
( q, S) ~$ F& L* Y1 ]2 r疾风之狼
0 V5 i# K4 g6 j, [2025.06.29 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
4
查看全部评分
-
|