EMU618社区

 找回密码
 立即注册
搜索
查看: 3045|回复: 17

[原创HACK教程] 关于MAME DEBUG版用法(如看不清图片请点击图片放大)[更新补充一些命令]

  [复制链接]

签到天数: 1803 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。% s. E2 f; b6 P

7 @3 `. \) g' ~* B3 u5 k2 U(1)如何加载ROM
0 F" @1 w3 d  y6 v6 ?* D* _( y* L: W5 q
先说说如何加载ROM吧' x, ^- n1 m0 x( w5 J

0 A1 a( o% M0 `7 h$ H6 K以MAME 0.148 DEBUG版为例:
* q( ~& M4 f9 E+ y$ _( F$ W# g0 O+ N, @9 G6 Z8 p
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
; x5 R# c% A) H# Y% _9 X0 E- z: a! T5 x% n1 u' j5 ^
注:MAME官网的MAME是命令行程式,没有GUI。
! S/ v6 U& W4 A# H4 i  O" J& S( i1 |9 Z
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
" j1 a) Z; @( }; N( k0 Y: Z/ @/ u/ Z! K
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
6 c  U& z( \1 X) Q: Y" f; j( @* ^2 F* d) y: u8 G. w6 P" k
d:回车6 L" _' D% T1 j

) ^5 f7 y& J6 [cd mame0148b_debug回车0 N& c6 E+ `7 `
3 Q$ G. R  k( z# e
如图1:" s( F$ \, {8 k- P+ Q' }6 L

, F% {, J& D: @: {7 }) @0 l$ x1 v2 c8 O1 P9 r/ J! V
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
; K; Q) t; P3 N3 X0 w4 U  X: |' _$ W- J, d; k5 ~* _
" q; ]7 m; l4 K$ ^: Y

( S. X5 ?. t) @5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;4 G0 m: e* D7 k  n& ~
5 Y( L/ p( ~/ N2 u7 B
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
0 `, e4 D6 D7 S6 {: y- s
2 ]. d- Y8 o- j  N+ W+ \/ b(2)如何呼出/隐藏调试窗口" j  X0 I; o/ z/ c; n, M$ l

7 w$ R. i2 B$ c6 j  V  [1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
0 u' U2 z5 }; ^" e% O2 l, D8 `; H' g$ v+ P
6 Q' u% a3 S) C, D# U

$ F. x: P/ V% ]; V- q6 K$ K2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:- n7 V5 g' G" o
3 s) v7 {) J7 U3 Y1 |) V2 Y
; \- V2 O5 P  f% U. B5 [4 ~9 |3 I

0 ]: Y9 i5 L4 p  `7 B. b3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。7 p; B, _$ |) b  H  N' i# k

! Z$ G( Z( l* }. D9 N(3)如何下读/写内存监视点以及程式地址断点7 @3 j4 `% w! W& S0 ]7 X; }

/ v( v: K* A& e* Z先说说如何下读/写内存监视点吧. {6 w, c, @9 Z

$ a6 g1 t5 `! J: ]1 [! {监视点命令格式:wp <address>,<length>,<type>,<condition>
  [( G/ j2 L5 r* V: z1 u" M* d4 i3 b
4 Z5 s% m" ~4 y1 q7 }3 A<address>是地址( t  E( ~  ~& n

6 M' Q3 I+ B" d3 ^! v( ]: d<length>是数据长度,长度必须用十六进制表示
  A; |: t' D7 R3 c; G  s' n  V# c( X2 |  U' z4 `
<type>是监视点类型,r是读,w是写,rw是读写. v% _9 V7 @1 V2 z  Y8 `

4 s+ q6 v- W! E! @, f" X例子:
8 g+ l1 ^1 F# W2 p; w4 Z, ]
9 y' }, W7 h0 t7 Z! x% y, Z% |例如对ff8569地址下写监视点,数据长度是1个字节; g, O# o) W0 M( D5 X% M  m
- e5 z- Q, L1 L8 P
wp ff8569,1,w
: b3 V4 t7 Z# D  i# _) q" y- G5 L, U0 o) G( ?( D! l
例如对ff2235地址下读监视点,数据长度是2个字节
  y$ A4 J! i, A+ v) N  ]8 g3 x% J& x/ {3 N
wp ff2235,2,r
6 S* \0 U8 X) L7 l: f/ H6 t0 ?: q5 r1 s" ?
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
6 _6 o6 E  \' z1 x) I* ^5 x1 r& e" B8 V8 z# J
wp ff7533,1,w,wpdata == 0
: Q# z& J: V" F7 Y% @
" B/ C1 B' w* ]9 `1 i以龙王战士日版为例:" J4 d* L. R- s- @% |

& [/ i+ n( E" l  Y1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
! J- C$ @- U: o' k
: ^) R$ ~' W( F$ Z" V. }& J! k) B
$ z. c" X$ e4 z6 C% z( t; f2 y" [! W! @! P0 K
$ W8 L2 w- Y7 ~
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
2 |& a7 I" W6 B/ [4 B" m" y( Y8 o0 H$ m" B  X

3 o* z! I1 W1 H) d, A) u# d, _8 k, m9 P, y
接下来说说程式地址断点
" c- Y0 N3 D0 L) n$ |' K' M' X, U3 o# b! f/ x7 O+ z
命令格式:bp <address>6 v% o) C. ^  l; d4 Y" K
8 _# a+ K5 W; z. K$ ~7 U, F
例如对000488汇编指令地址下断点
' k! S8 C( l# t4 n1 j3 n6 a# C. A0 i! O; t; F- h* E0 U
bp 000488* ^* c. \" z9 B% |
; r. E; ~5 ?! [2 _1 ^# k$ K
当程式执行到000488地址时就自动中断
' g5 |3 B. }& J4 X3 x2 P: r* H* e: ~1 g6 O8 j8 T
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
5 o3 {* T: h4 G3 [- o3 G( S/ i% O
( s6 u( C9 ^% }6 f# W& E% L5 G0 g9 S有错误请指正。
$ \% m" V1 p, W; X& E% `. i- g" u( z1 H3 Y1 c  F
补充一些命令:
/ w% m5 D& z; ?% U9 E) Y  ~: E0 d  z5 y3 f* j! B1 G' }
"wpclear" 清除所有监视点
0 v- I( Y' l& I  }9 s"wpenabld 数字" 开启监视点3 s- y* a3 b4 p0 {& L' H5 t
"wpdisabld 数字" 关闭监视点$ @0 d8 s6 m+ z
"wplist" 显示所有监视点0 X0 g' d; B9 {5 a" ?9 J4 E) ?0 W
1 E  X$ v: q8 O1 G' g
"bpclear" 清除所有断点9 r+ d+ J  ^& N) o
"bpenabld 数字" 开启断点
! R. i4 i/ R- F"bpdisabld 数字" 关闭断点
1 L3 B7 g+ ]8 X1 Y) }' `8 A$ ?" A"bplist" 显示所有断点
' M. e' d( q7 S

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

3

查看全部评分

[发帖际遇]: 疾风之狼扶老大爷过马路,警察叔叔奖励疾风之狼 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1548 天

[LV.Master]伴坛终老

发表于 2013-1-23 23:55:27 | 显示全部楼层
感谢 疾风之狼 提供本次教程 辛苦了
[发帖际遇]: 孤独逍遥整理箱子竟然翻出了 4 个 柠檬. 幸运榜 / 衰神榜

签到天数: 3247 天

[LV.Master]伴坛终老

发表于 2013-1-24 06:11:00 | 显示全部楼层
授人以渔啊,万分感谢
[发帖际遇]: 一个袋子砸在了 hellok 头上,hellok 赚了 2 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
* o9 c1 V' Q& U5 [5 g9 v, T+ C1 D% p
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

发表于 2013-1-24 15:32:47 | 显示全部楼层
谢谢,有空学习一下。

签到天数: 1803 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-24 19:15:24 | 显示全部楼层
更新补充一些命令
[发帖际遇]: 疾风之狼 捡了钱没交公 柠檬 降了 1 个 . 幸运榜 / 衰神榜

签到天数: 2536 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
6 X% v* O8 W, l& W) K  N6 C5 _
1 U$ d6 Z9 _! S+ g' G/ G* d太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
* x- |5 B" v& |* D$ B. x  X3 `6 T, b
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?4 ?+ E. f* u( E0 X; U9 J
2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
2 U. |+ `$ ?" S7 s' {
. q! }7 B4 c0 ^, k, pCheatEngine搜到的临时地址当然无法对应MAME的内存地址9 T* M9 @- r$ U9 U' `
# M6 P. a+ A& g8 z( e& U3 T
新版MAME没搜索引擎了么?
5 l, \, L! X0 O7 E" C4 F8 X晚上我看看4 f# C0 a  W2 L5 `' n

# M2 K$ h4 Y5 e- U8 OMAME查看地址的功能还是有的
" x1 \( c  H7 }; ~( q菜单里的第一个选项就是显示内存地址  f/ }2 q& s; `% c& z
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1803 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:+ i6 \+ J& V. ?' G4 A
1.DEBUG版MAME有作弊码查找命令
2 @* |% `" ~6 k1 b* P9 N) [; S3 ^% P: z9 j
命令如下:
/ ?1 z* R+ k: d8 ~' A7 jcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]5 x, ]1 I; H2 o; b
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型  d9 G( z' s- k  K& f, \7 K
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
1 U: F$ X/ c6 R6 S6 |$ \* [/ I( A<swap>是决定字节是否交换
) F5 }. l7 ^) m* G: U+ q<address>是地址,地址必须用十六进制表示,例:0x100248
  K2 a$ D4 p6 C/ m<length>是地址长度,长度必须用十六进制表示,例:0xfffff0 d3 e8 z- u2 }7 o( {
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU2 M( l, Z* U, O

/ s9 {, ]3 q% D0 t请打help cheatinit命令获得更加详细说明
1 w3 Q+ K7 \" N7 f
. ~8 R/ Q* ~* P3 S6 `$ Vcheatnext <condition>[,<comparisonvalue>]
! G; O. F0 U6 a: Y2 j, P<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
* s" b( L& o) v' L- g[eq]是等于
1 k0 ]3 @* v; S/ Z5 ]) P[ne]是不等于2 e) o- x6 p: d# S
[de或-]是减少% |- c1 T5 X& {: k5 }
[in或+]是增加& U4 }6 V/ R% o- x/ G
[deeq]是减少或等于
8 ~- `+ d" \4 E+ S" Q[ineq]是增加或等于* j! r7 }  B5 u( W9 X6 z( I
[lt]是小于3 n9 B( l. }" O' n4 |2 s
[gt]是大于, ~; }. @# k' P& b
[ch或~]是数据有变化" b' U, \- v3 c/ h8 j5 g6 f

& k. V( Q$ ^' R; l& ]) a<comparisonvalue>
9 Y9 S/ n& J' h* ~0 e: v2 e; X要搜索的数值) ~$ ^/ v( g9 G7 A0 k+ T) A5 g
/ t# W/ P) l+ d& Z- {9 L8 L
请打help cheatnext命令获得更加详细说明
% p% Y% a5 y' i! h. n
  Z0 u) y1 f5 N- s) o. W3 t- c' Y6 tcheatnextf <condition>[,<comparisonvalue>]2 c+ g5 q) b  X# p
说明同上
: \5 H* o& B! ^% N+ J1 H; ]) q2 }+ R! w/ I  @% |6 ^* ~  D
请打help cheatnextf命令获得更加详细说明
/ b3 P- |4 [2 f. |/ \2 Y( j
6 l$ O# J0 }. o8 N& Icheatlist [<filename>]# T0 m8 G* B/ [- Z. r/ v
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
. |' L0 @( P/ X1 \5 v8 h& p+ V" D8 z6 l! J; M, y* K9 G) h
请打help cheatlist命令获得更加详细说明) T# _, U/ q% y9 s7 m
- U! T* G5 o3 z+ L$ s
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化: ?1 R3 L. g: [( a, T8 o

5 X/ F6 t6 v! j% G1 m, M之后进行第一次数据搜索时要用cheatnextf命令来摸索
" ~. {- O  J7 D3 s% x7 ]! a
) H6 u7 m* U, o+ g5 @到第二次、第N次数据搜索时要用cheatnext命令来搜索
) z% \8 f2 O4 k9 V) V# r5 L% F* t- n! H
举个例子吧:* e$ ~, Q: z- G0 f) m8 `3 n

+ ]: ^8 \; H# k; ^9 l以合金弹头X为例:
6 k) v1 a; F( F# o$ w4 D9 }6 |1 k1P生命数是2
9 q: J; \! Z  m8 W* H. C
& S: m8 J* R: G1 ]; S& U3 G先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
4 ?4 _9 e, d9 a" d0 Z( Q1 \
% c2 x  Y3 }: V7 _8 _6 x9 O命令如下:
9 k. t" `; n7 n# e' rcheatinit ub,0x100000,0xfffff,0
2 i# D0 m( J# u* G) I6 b8 l8 @# x# \6 a# i  Z9 V$ n5 t7 X
再用cheatnextf eq,2命令搜索生命数2( f. r( S* b' _1 @4 U2 `

/ J" e6 A0 O9 M2 v- gcheatlist显示搜索结果
4 P' M: b# m! U# r0 r+ o( p" [- G% {9 G% n, F
死一命后用cheatnext eq,1搜索生命数1- D9 [6 I7 l6 ]6 s3 W& \* ^6 l3 F

; o8 j+ W. M* }) ]cheatlist显示搜索结果
8 ^" n* Y4 e8 Q2 a  \.......
' |! v3 L1 d0 g9 u- f5 r直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果; Q  J. Y% d1 N* K2 n; h# M- E

% J9 J. G0 Y; g0 E' J! O) h$ \( u: j还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。( h. m9 m1 i% H

+ Q' Q1 x( F, P3 P& f4 y. @, C没作弊码的话....5 Z# I( u: B% D9 M. H

& I2 j+ n( w2 ^! U" e" i0 \不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
' o& ]+ e6 Z7 @9 @) E* v6 T
2 M$ U, x- i8 n, U" L) k/ ~或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
8 {) C6 ?' O9 y. f8 o3 N
1 K; y, w/ j6 l4 @( S: l8 n2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
+ [( P1 [- [" h# ?* B+ T7 ~2 N, k$ E. R3 K
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
# o. M2 L0 H) D
5 w7 `9 g4 {5 Z* R" j+ J/ y
回114:
+ g: x* c5 w% j7 O- z
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
, N+ E3 K, X8 t' A+ a! u( l* Y& u. O2.没地址如何查询地址?看上面我给zsyf的回复
- C" a) I0 Q  o9 |9 S. s

6 _; x+ n3 O) I7 M打字真累.......orz.......
[发帖际遇]: 疾风之狼踩坏了花花草草,被罚款6 个 柠檬. 幸运榜 / 衰神榜

签到天数: 69 天

[LV.6]常住居民II

发表于 2013-4-21 01:03:22 | 显示全部楼层
查出减命指令后怎么改到roms?完全不会啊

签到天数: 31 天

[LV.5]常住居民I

发表于 2013-4-28 11:23:53 | 显示全部楼层
同问,我找不到kodj,不知道少了哪个bios,rom,但是有个三剑圣(wof的改版)的rom,也找到减命的指令,就是不知道如何对应到哪个rom的文件。最后一个个试验,似乎都不对。是不是rom加过密,我记得mame的rom,有变化过,最起码在00年之前和现在的不一样。连名字都不一样,到底这些rom是如何做(是不是叫dump)出来的?
[发帖际遇]: sdiencelee摆地摊卖菜,占道经营被城管罚款 3 个 柠檬. 幸运榜 / 衰神榜

该用户从未签到

发表于 2013-6-14 19:12:06 | 显示全部楼层
感谢分享{:4_92:}

签到天数: 1279 天

[LV.10]以坛为家III

发表于 2013-6-14 19:20:04 | 显示全部楼层
大狼就是我的老师......!!!!!!!!!!!!!!!{:4_97:}

该用户从未签到

发表于 2013-6-19 19:44:34 | 显示全部楼层
非常实用谢谢,不过最右边的数据是什么意思啊。

签到天数: 380 天

[LV.9]以坛为家II

发表于 2013-11-14 20:14:51 | 显示全部楼层
又是一张科普帖,一定要顶,而且要收藏
[发帖际遇]: drogon49花7 个 柠檬买彩票,血本无归T_T. 幸运榜 / 衰神榜

签到天数: 2776 天

[LV.Master]伴坛终老

发表于 2013-11-15 16:01:38 | 显示全部楼层
果断留下技术的脚印

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2024-12-19 18:53 , Processed in 1.181641 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表