设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 2052 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
% a- g+ D! ^" ?5 Q& \3 ?9 ?  [& R$ [2 p/ K' O% p% ?* n  O0 ^$ {
(1)如何加载ROM* l2 M* k+ F# v

3 |4 Y- n  m5 d' @" C, S2 S0 a: x先说说如何加载ROM吧
. Y! k, c- z$ |. G2 h5 O* r! S9 x# h! ]! L! Y9 K# m: H/ i
以MAME 0.148 DEBUG版为例:. l1 k5 ?. x' K4 C
) Q9 l" G$ Z, ^) E3 {2 @& ?! p5 P
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
* g7 n2 l* w. K" E" Z7 a' e% x2 [% ~6 D  C. C* f
注:MAME官网的MAME是命令行程式,没有GUI。; O1 Q2 C# O/ v4 D
  @" H: J, p) K& {
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;% y/ l2 }4 A9 e' B4 G1 F- X
' x5 n4 w* R1 h8 ~3 E
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:5 T) @/ i- k% S  Y
* c6 [% @& Y1 p- x! P. c; p; g; I
d:回车/ r; a7 P% \; C( n
* `7 _9 h7 e1 K6 V" ]$ S7 F$ y
cd mame0148b_debug回车# r' T+ t" m3 s2 Y$ e, W' ~

8 P4 m! T0 I: j- z如图1:! W" s0 r# G' S5 e- c

9 j5 s9 a; _3 W+ O" k1 p5 r4 Q
; k0 u% I5 s' x( [5 ^' M; O$ y4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
: c: v  k6 [+ Z* s! u# R" p3 v9 @" J7 e. Z1 A6 c: K
7 W" Y% M. B/ h
! b& Z" k/ G2 ]! L9 z
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
7 L2 |5 I) G5 P: v5 p8 q6 f, e. Z8 ~
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。# a8 U. V" {% s$ k. O! {. k
. E9 k+ G5 K7 r- n' n4 Q* o4 o
(2)如何呼出/隐藏调试窗口
; ]  P& b8 v, i, F' r: g0 ?5 ]/ a: ^  m4 m3 S
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
  D/ N( @2 [3 v# i4 N  M- S
1 W/ a5 L" s4 n) |1 |3 m3 g) r, w0 o& @) s9 o' \. h4 `' p. I
7 X1 I% b$ K# E) M" V% c
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:. Z4 t- J) K7 `( a# U- H& M8 Q
. U; ^# N1 Y  S6 U  p
7 H  B9 g: x5 }& D
2 ^# M4 c4 N/ o( I. o4 D. m
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。8 E9 ]; `- \9 L

5 Q+ c2 D% {- K9 L' k(3)如何下读/写内存监视点以及程式地址断点
7 [7 G6 Z: K  ?$ M" V7 N4 @, ~3 n' }+ t4 F- A
先说说如何下读/写内存监视点吧- D0 D, _8 p1 g' o
: F( ?) ?* R7 P
监视点命令格式:wp <address>,<length>,<type>,<condition>
% {/ R5 _* O1 ]* f3 e3 M- {  _- A( q4 I. Y- G$ E, ~8 v) }
<address>是地址
) x! W$ q6 B) J. @1 a2 T3 Z8 R$ N: N5 T- ^9 t* @
<length>是数据长度,长度必须用十六进制表示4 x4 R+ J3 _( i0 R5 m" J5 {
5 Z* v3 P2 k: T% @3 ?' u+ F
<type>是监视点类型,r是读,w是写,rw是读写
, B& ?+ i' U1 B& [3 ~& b8 M' r, \5 B: F- _
例子:
7 _6 Y* v) Z) C3 G1 i
% ], u" E* F- A, P/ \例如对ff8569地址下写监视点,数据长度是1个字节) u5 `4 v3 M; K& @) z' v

' @9 c% m3 l; u0 y3 ?* U. awp ff8569,1,w
7 }! _* G; c: P! b
9 X6 \- B# {; O+ u例如对ff2235地址下读监视点,数据长度是2个字节
& }/ ?# Z) @) I' B5 z7 M! v4 m' @1 c) }/ \. _
wp ff2235,2,r# e! ?# P  [* r% _1 X: Y
1 H( y% T% n9 ^& m3 z$ v+ a
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
, E' I' Q$ |  y# i" _: g- u1 H
$ d. C! Q" d" r: `  Z1 x4 Zwp ff7533,1,w,wpdata == 02 C  k( w& }7 y9 J
" y; o6 @1 Z2 h4 Q' f- }9 t
以龙王战士日版为例:+ H9 d! l7 h: w5 k% a7 `
6 a2 x3 D! P5 M+ v
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
  x( N' @7 V' m& I* }' p8 y& l9 K) l0 y

  M6 f6 n: K: g' q. @6 a, ]( s' ~% C' w/ h: Y

& q2 f" O  I+ s: j3 A/ t9 E2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:' n# _, y6 ^) u- p# W

* J9 I0 _+ m7 V( y% A$ L9 a
/ [  Q4 A0 G* w" u. r3 D- `& L9 s2 [7 m1 }
接下来说说程式地址断点
. X: ?# `0 o6 @7 ~/ I( K  [# \1 h: g: n
命令格式:bp <address>
7 Y* E- b5 y8 M* M3 B" w% Z
5 w. C  {( [# C) Y6 }9 {7 R" k- m例如对000488汇编指令地址下断点1 i4 E8 K7 D0 E1 M2 s" m, a

( m" T' g' e% N: J, p, x# [, [4 Dbp 000488
7 }' v3 J0 ?3 _% ?
/ u4 i( R2 c% N" O7 J当程式执行到000488地址时就自动中断- s1 {" O* I; Z- z, \. l2 ~  [' E

7 ~( }) g! ^: n, j& M: t! N更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看; T! G4 b$ \2 b! y# z

& Y( w9 T5 g$ {& k% z& O有错误请指正。" V) q: d' V9 k  \1 Z. y1 a

) ~( V1 v( `: N, A" x6 [. Q补充一些命令:& b; G" v3 W# R2 {& G

" K) Z8 L: n9 h6 o6 H, D"wpclear" 清除所有监视点+ V! x5 [6 |1 p  |* c7 ?5 z8 t
"wpenabld 数字" 开启监视点
2 m% Y- x0 l$ u# T: j' y* _+ S"wpdisabld 数字" 关闭监视点
% V7 h) w$ q( R# K( |; J& R"wplist" 显示所有监视点* [0 R  t3 s, n+ n9 X$ C
& Q  N2 z  l" T% [7 r
"bpclear" 清除所有断点- s% L  \( M, I. S
"bpenabld 数字" 开启断点# C2 v* G; Q# A+ x3 K& r% q
"bpdisabld 数字" 关闭断点
  \' c& r  Q+ K0 v* t6 Q/ s"bplist" 显示所有断点1 g: k; Y2 f) _! |+ e' R4 A, ?

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3492 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽+ p+ f' |, ~7 i* }# b- ~+ h+ @0 ]& C1 O

. H; E8 Z2 _; C以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 2052 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2569 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 8 y( {1 `+ V0 z% V& A; Y+ z" g% O

0 I2 F5 c0 [; [; C太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
' `* b% u( ~5 W0 f, _9 W0 ]8 I" V2 n
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?- [, q- ^3 r0 f7 `% G# r6 Q. t
2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
$ a# C5 l7 b; {& S9 M
$ s& ^- b9 o" j0 c. pCheatEngine搜到的临时地址当然无法对应MAME的内存地址+ x. S3 n0 X! ]0 \; S
) E3 |: g( k* x! l( I
新版MAME没搜索引擎了么?- Z+ D4 t; ~9 ]& R; V6 l
晚上我看看
8 z7 y) j2 ~6 a2 k
3 J! l7 @* |3 g! V! QMAME查看地址的功能还是有的
" p% w) G5 H8 \, N& d5 K. }菜单里的第一个选项就是显示内存地址
/ H2 Y- ]$ K" Y3 ?不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2052 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
9 {1 \) u6 ~( W) Q1 E( v; q: s
1.DEBUG版MAME有作弊码查找命令% n$ c, Y6 m+ }4 C, f8 A, h! p8 a9 j
* Z1 b6 r3 c# g, V1 N' w$ X
命令如下:, O; h! Y: Y! Z1 a/ i
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]; u0 l9 n- R1 \  O/ \4 h  i& g
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
3 ], d) o# G  R<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)0 R" O/ T0 t" K5 h
<swap>是决定字节是否交换7 l. ?3 _' ~1 o# h6 a
<address>是地址,地址必须用十六进制表示,例:0x1002489 p$ h) h* t# B4 U: O
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
9 [4 u7 U7 _" `2 l+ z<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
7 Z4 y4 J$ s; G0 T% u- [
4 C) S' Y9 l2 v; R5 \请打help cheatinit命令获得更加详细说明
' Q8 t/ M) V" h! S3 ~0 x. L
, @5 L9 ^  b. b0 p6 J  i2 Gcheatnext <condition>[,<comparisonvalue>]
  d: J( ]3 B9 n2 E% B! D<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]  W! H; F: [$ h1 a
[eq]是等于
4 w4 j7 I( p/ c9 p& L9 C) v. J[ne]是不等于
5 p, a' i7 G/ u% Z( Q: o; ?7 B2 l! [[de或-]是减少1 W0 d* z$ x$ k: v
[in或+]是增加
7 d* W# Q# \) U- q& x" C[deeq]是减少或等于
" J" y( K6 _0 D- I1 H# K& [[ineq]是增加或等于7 g- D( k! O$ @- {# h
[lt]是小于1 ~1 G7 [8 N  z8 y4 ]- [4 _3 V
[gt]是大于* R% g, P& o, O1 s
[ch或~]是数据有变化
: R8 q$ m, _3 }$ [+ J2 `: S1 ?
3 h5 t# V% ^% p2 F7 [' P# B1 {<comparisonvalue>* V: K7 |) _0 T& `9 ]  f0 S
要搜索的数值
8 `* N# t' C' b' M! D0 m6 w; B
/ Q! h2 I5 F  M7 [请打help cheatnext命令获得更加详细说明
6 Q+ S' q' O: r6 U& @9 y0 V$ X" v$ l3 D7 V9 O& o4 Y
cheatnextf <condition>[,<comparisonvalue>]& M" x" v7 n2 C+ @* u( X
说明同上
+ I1 [2 f8 Z2 B* A) D# x+ c* k
7 z1 [; U4 B+ J! \3 |" J请打help cheatnextf命令获得更加详细说明
8 o( @+ x% z/ s! q* Q, o" C2 f( E4 u. M
cheatlist [<filename>]
+ F+ y6 r0 ?3 W8 @; q显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
8 V9 d' C! ^* p  S$ _! Q: g: Y9 `5 T& J3 e1 m) \  @0 {) e4 p
请打help cheatlist命令获得更加详细说明6 z( X- m8 P$ b2 Z1 l3 T( Y6 e
1 o2 @/ P, s6 n7 g
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
$ p2 g+ ~+ m1 |4 E6 T6 Y" [  h. i9 L6 ~5 a) o2 t* Z
之后进行第一次数据搜索时要用cheatnextf命令来摸索6 b- l$ `! x" r2 \
5 y  \" ^" ?* I+ L) q& \
到第二次、第N次数据搜索时要用cheatnext命令来搜索3 ]$ |+ `" N5 v  ]. S) f

8 f3 Q8 E5 z3 _  I* j9 }6 E举个例子吧:; M" h2 G5 f4 @- t8 ~/ ^) D$ \

4 y" p, I* F) R7 o5 p以合金弹头X为例:
5 B% n. F6 J, i) O7 L8 _* Q1P生命数是27 [7 _+ v. `. E) b0 h
+ f" {3 _% z! k! L% o8 Y' A" p
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
2 C" Y  {6 Q* Y7 A4 s8 Z) N' D( D! R( K
命令如下:+ D2 h$ M& N" v* Q( y: i
cheatinit ub,0x100000,0xfffff,0
6 W1 f% L" r: F# L/ z8 T3 F3 ?/ w: ?1 V" }
再用cheatnextf eq,2命令搜索生命数2
! n. `7 D3 Z$ w& E) E! }) Q  j; t- Y' G2 J2 b; [6 ~* A6 S
cheatlist显示搜索结果
, V2 w) e( {% X2 \7 A
6 e+ S' f' u& I+ g" H- I, \$ C- m# R/ s死一命后用cheatnext eq,1搜索生命数1
) y: g3 I: ~1 p+ u! j7 U. f5 q( H+ J" H! i& x' Y+ y! |3 F
cheatlist显示搜索结果4 G# T9 }# J, d9 b: h: U
.......
2 e  ^/ q1 x; ^' M! z3 A  i/ Q! D0 |& s直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果6 n2 v* I4 D1 e- `

& M, n5 Q1 t- Y0 H; F  m: E5 N9 K- P还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。8 g! L& G6 L" }! p- p# e

( o2 V( h6 ~3 L2 H0 d* ]没作弊码的话....- w" H; y+ p+ u; Y: n
: p9 \* K7 `, v, W2 k. p) }
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能). C) x* N5 V& d) W

) v! p" b/ _2 m; Z9 b: h或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)4 g4 U. A; n# `$ i

) U( ^, {3 R8 P* a2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行7 q+ f; E# {3 b! T% d5 L

' S4 W& |2 {8 Y6 ~要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

: [6 T6 y* ^! D( M( j( z# W
) o% o3 Q( P3 p9 G回114:  B* Y3 U4 n( J: r
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
9 l1 S2 N$ q; Z5 i2.没地址如何查询地址?看上面我给zsyf的回复
2 H# m# B6 R9 {, x1 l  d/ n
; v( t, X# D' r6 l8 v
打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 3022 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-8-25 08:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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