EMU618社区

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

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

  [复制链接]

签到天数: 1890 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。0 @$ _/ F. u' Y' ^/ F! }2 ?

& E: W. {! V' \(1)如何加载ROM
; p8 ]/ o% Q% L# [
/ G  K: O. Q5 o8 X0 t先说说如何加载ROM吧
3 B) p& x- d' {4 W0 R$ b
5 g2 L9 q( s6 N7 S以MAME 0.148 DEBUG版为例:3 l, Q2 C: M( b5 G' h- s
, D+ n$ P/ ]0 @7 ?
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
5 d% x' ^: V/ x7 I4 f0 O& G# D' H
注:MAME官网的MAME是命令行程式,没有GUI。
6 E! l* j, B" B
5 O: m3 n9 U: h; `) W- }4 y/ [) ^2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;  c2 N7 E9 c/ v, o

) x5 e: K8 C. B0 h6 C6 }8 ?3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
9 [" F* X- L1 b/ N6 i  U
+ @, A5 d/ ^# Q1 X' v( m! w' ?d:回车
# b' d8 T8 q/ R# s! A' d" L, Q- S, J8 l
$ }- s/ M0 H  I: \' @cd mame0148b_debug回车  l* I% V5 j1 ?. R2 T4 C' E! o
1 n2 a' }/ n2 f6 d
如图1:3 l5 `$ x3 Q: _7 ]# j
* U3 P# R- K+ V% V
( B0 s% l7 f. b# b( U
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:+ p0 h5 G: J, j3 H9 @; z2 n; L
6 {6 N1 \3 h; o+ \
; u8 p# W, {5 Q
" ?5 m& l5 e) a, V; V3 I& y' ]
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
% |5 n3 N( f6 \9 L$ M' x2 e$ D" b! M4 E3 B5 w' V
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。. W$ Y/ t, V7 m/ L

1 B: {/ W& P8 M2 z(2)如何呼出/隐藏调试窗口
) H) ~0 S/ m4 ]( f# I: P5 G1 O1 C* t( p$ q- D6 t2 j( w
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
9 K! i" z- \- ~0 t  F
" O7 _" s/ K' i, ], G0 }1 ~: C" e
* g& m* E! O* K9 @4 u& ^" `; Q3 x4 `* w/ P1 w
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:$ }4 x7 S+ y# q" _3 V3 X. s

" X# w. u4 k* C0 b: k9 R  b' A
0 u5 X6 M+ Z9 Y4 c* j! c" Y0 }0 ^, l$ W9 W8 v& e
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
: Q, X6 n* E- o
/ s7 C: c# c! T(3)如何下读/写内存监视点以及程式地址断点4 B; E6 _& \4 E) L) w) t2 H9 G

# Y: ~5 U9 D6 \* }先说说如何下读/写内存监视点吧# P2 J  h6 {" f, S2 j" u1 O

+ T) S4 v7 M, w1 l: a监视点命令格式:wp <address>,<length>,<type>,<condition>
8 F3 }# e. ~9 X4 t8 ~! k. T0 R: v# t
<address>是地址5 t& B9 s, Q% z. M+ a( _# Z; z

& V: o+ K. V* C- X# E5 J$ L<length>是数据长度,长度必须用十六进制表示
" z6 ]' r9 _$ E" ]( m. k# ]* y, ]7 [. r  z6 T, b
<type>是监视点类型,r是读,w是写,rw是读写0 G- [+ H0 U& J" d5 Z

. L5 D6 j+ [  R, d- H3 ^6 U例子:
. h  o0 t- i  w9 b, u5 V9 G5 z; ]! q+ Q, f( _9 X# l
例如对ff8569地址下写监视点,数据长度是1个字节( d# W+ f$ d- }! q3 ]1 T1 @2 i

8 d* |1 j+ u2 [wp ff8569,1,w6 o! V" o+ Q! Q
8 \/ e) i, x5 k$ j3 a& b7 ^/ c
例如对ff2235地址下读监视点,数据长度是2个字节0 F& k' H. |$ J

0 v5 t( L7 T* X( F4 W: h" B: [wp ff2235,2,r
! u% O8 y# J% O% K1 R! Q" n  k
8 b* x! s" r: ^" l, y$ P例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断  h$ c7 d# j4 l, d8 E  D( v: i
* \! ^! a2 r$ d9 Z7 g
wp ff7533,1,w,wpdata == 01 X5 N* @2 J! F! z- h$ I( q( N

* L4 c) O, t6 L. H  y0 S7 J% \以龙王战士日版为例:# u' O0 O; Y- Q7 r$ o- u

6 U) b8 x: g4 T( D  x1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:( C/ {4 [: A4 T6 E/ S# Q' b

3 P( K6 R/ a) [8 ?: m
% M, l6 ?$ A2 r( W1 U7 k* Z
+ w( E8 A  i$ R6 O3 J5 I( c
' q8 ^$ x1 ^$ P. j# N& U. N; l, j2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:( s1 b2 j( P2 g3 ?% g8 E* Z( K

9 `- I! ^& J4 q
6 |4 _; l3 T5 D: Y% [
3 A0 v" X/ _, z3 J( Y! F8 @接下来说说程式地址断点$ B! s! j3 W& Q) e. W0 r% R) `! u4 T
3 s- S1 T% }0 f! n# k( n. N8 B6 ~
命令格式:bp <address>
) [% c0 d1 U/ o+ c( S9 _/ L5 |& y" |6 h& V& a- F2 \
例如对000488汇编指令地址下断点
3 }5 }5 z9 C3 V/ x" y7 ]. i& }$ X9 `1 T$ e- p
bp 000488
  [7 ~3 D1 H7 B! T6 i& W" p8 \. f. R% a% L( {$ H# [( c+ ~
当程式执行到000488地址时就自动中断
/ z9 {# _) f+ d4 }
% h$ ]8 F) i/ X; T更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看7 \9 ]) ~" S. n) R, J

9 c3 H, |; ~. f$ U, k有错误请指正。
: }6 F! N- z* _
8 v2 x9 C( z; _补充一些命令:
& s8 M1 q6 \9 n
$ ^" v5 v, h# m"wpclear" 清除所有监视点
2 ^' I# ?1 A; k6 n1 A"wpenabld 数字" 开启监视点
4 t) m9 X! o' b) J9 }: O- m; s"wpdisabld 数字" 关闭监视点
+ t7 K  A+ f( @" W& n"wplist" 显示所有监视点+ o8 I1 y7 B7 s1 U+ D$ T

: O0 c5 O  Y4 h+ g"bpclear" 清除所有断点
' B! ^$ w  Y, [9 i! \"bpenabld 数字" 开启断点6 v+ m( s* _- e  F* X+ S. l
"bpdisabld 数字" 关闭断点
( \* e% @1 w: }+ j9 D"bplist" 显示所有断点
' E5 j' }9 |/ h: v, Z

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3332 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
0 ?$ [9 H6 o# a% H" N5 U: U! M8 U0 @1 G
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1890 天

[LV.Master]伴坛终老

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

签到天数: 2548 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
' L( k' a) |+ e. I+ P; f/ I$ `+ _4 h% r2 W2 f4 ]  N7 n
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
7 |, \. O$ A1 M( `0 W; m0 O, f
/ H! _3 H1 D! j7 w4 k* o& T其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?
1 }) @. A' A3 w# Y$ U2 m2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
3 {6 C3 z- T( {3 o% G& J% |$ j- g$ I, O3 [
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
- ~7 u( o: ^& U! q
" E; @9 w4 b) d: d/ P: G1 K新版MAME没搜索引擎了么?8 p5 E, v  ?9 ~
晚上我看看! M. t& T& |# h0 ^: ~8 y
' a* }8 x$ B* `, i% c
MAME查看地址的功能还是有的
4 P7 D6 T# D+ i菜单里的第一个选项就是显示内存地址
3 K4 w4 t% k3 \8 \3 Z不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1890 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:& ^" Y' I" m/ N! h' D5 |1 @7 [
1.DEBUG版MAME有作弊码查找命令- N: m, R6 t. B

3 c- {7 u& X. [( b命令如下:1 S, K7 l% u( b$ D) D  [$ |7 T5 A
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]" N$ i& ^2 F2 c3 v
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型, W: r6 f3 o* L* t
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
6 n8 p' L2 D) q. Z<swap>是决定字节是否交换0 ?' u% z& ]) ?0 a& R+ H/ W! J& u4 S
<address>是地址,地址必须用十六进制表示,例:0x100248
1 A  r9 [: C( b( U$ L$ _<length>是地址长度,长度必须用十六进制表示,例:0xfffff9 P" s: m  W9 Y
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU7 N0 E, s# @6 M9 @2 h& {2 q  }

2 l, o7 |# u+ w+ l/ }8 ?请打help cheatinit命令获得更加详细说明
  g0 j1 o7 i; R# t/ n. @5 {. s2 E. ?* {, O9 Q
cheatnext <condition>[,<comparisonvalue>]
$ _& c0 }; w, z; Q<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]4 ^3 i- X: e% C+ e
[eq]是等于
( t! Y* }6 K6 h1 J[ne]是不等于9 ~3 }8 e/ k# z& i
[de或-]是减少7 M4 k" D8 w. Q5 V# k
[in或+]是增加
' F9 @8 @9 G( U( L6 ?[deeq]是减少或等于  I8 ^: x7 j: x  u
[ineq]是增加或等于8 Z3 l2 ^8 R5 P7 e, \5 ]& I
[lt]是小于% J' ]- o5 n. _- f" K3 y! G
[gt]是大于
0 H0 C& V+ d7 \- x& Q[ch或~]是数据有变化
- S& d7 c  |; x0 r1 m) [7 \2 G* G: O, i
<comparisonvalue>
+ \) H+ ~! f, M. l( F要搜索的数值, i3 u$ ], S, G) A1 j+ T
. R) h* J/ h) L! S) x/ u' P
请打help cheatnext命令获得更加详细说明
  q9 S, w! w( X( w: q9 S* O
$ D; e* z3 v, s9 @' ?cheatnextf <condition>[,<comparisonvalue>]
7 x$ q. q4 p  Q' @* }7 s3 |说明同上
2 R1 S7 x4 e- G4 a. A
( X# N; p, p* \请打help cheatnextf命令获得更加详细说明/ B8 I* e7 k3 }+ p, T4 U1 g- n

5 {: p: w8 t/ Y& Q/ ?9 Fcheatlist [<filename>]1 v; n5 [2 m, s
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件  b# U0 p! Z" v: e( D" p" S- `7 y

/ X; M4 P" l: I3 w请打help cheatlist命令获得更加详细说明
7 u$ u6 E, `2 M$ D
7 s9 N7 W* [, t  l' a7 N8 d) r5 ^第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
7 y8 V! c" G% I% y* D, e5 ]/ @- u7 e! T% ]* W7 a& q
之后进行第一次数据搜索时要用cheatnextf命令来摸索: M' t" k. D5 j0 z; F
6 ]- x2 }/ _( {& f& b
到第二次、第N次数据搜索时要用cheatnext命令来搜索( T, k, n) l. Z! g. @

4 v) o2 D; X$ Y  s( {# s举个例子吧:/ @; t( o" C3 F! {! `8 q1 M% L

0 Z  ]2 ~! g: l9 J: @1 R1 k以合金弹头X为例:; O. W, V% n( z
1P生命数是2
; f  \( a/ R: M9 F% z/ K, r$ d
3 Z( l# M; g  ?1 Q$ w先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间1 \% F4 ?  A2 R! ^# c: u7 E/ N
: |) p# [! M& W% A7 F
命令如下:$ v5 h5 y9 J0 D( o$ S1 p5 K
cheatinit ub,0x100000,0xfffff,0
: s5 K# B# O+ R2 b7 O& G3 b* ~" z/ V* i4 K
再用cheatnextf eq,2命令搜索生命数27 e# A$ a. C1 O2 ?
# {9 n# B) K! x, Y: @2 L9 w
cheatlist显示搜索结果9 V4 P  B& u; U  d8 W) S6 w! ^4 g2 p
5 u- N' s( U  I9 ~: c
死一命后用cheatnext eq,1搜索生命数1* }) i# Q3 D* l# f% n4 b
2 w) ^6 N& ]& d& S% x4 I0 s
cheatlist显示搜索结果0 p: M7 j3 T1 z6 \' m1 J
.......) Z( y1 d2 b9 J8 b1 n: S3 l
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果# D3 \8 \! m7 I: p/ P  d/ \

, c, q  A; t/ }还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。1 v( i" E3 m8 M7 M& n

+ |! T1 h* L& ]: ]没作弊码的话....
- S5 F3 h. d7 y( k, b2 @6 ^5 K4 j1 K; r1 t) a0 n
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)  F4 u1 F+ _0 t+ A

0 ]( s: k" Z# R- u或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
0 v1 F% g+ ?# j4 F5 U( K+ O
) m, g* }6 I" U; s& g- t5 B' V4 n2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
2 T6 \) Q: Q7 a$ f; G+ n3 A8 t6 T( f& \6 Q+ N
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

- I) l$ \- l# f. @7 ~3 U% C. b) ?; ]
回114:
/ M  R! C6 Z1 B/ ~
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
) \: V6 k: L" X. k# t* X2.没地址如何查询地址?看上面我给zsyf的回复

( e  ]6 M9 c# I8 r  g8 N  O
+ y* R' u3 g  `$ g5 d5 W" Q打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2861 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-20 08:52 , Processed in 0.078097 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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