EMU618社区

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

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

  [复制链接]

签到天数: 2138 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
0 g1 K3 Z7 ?+ G
8 t$ X, d: P& h, S$ h4 x(1)如何加载ROM
& ~& K" y7 s3 s. U+ p6 R' w$ {' M9 O  Z! |! Z+ C
先说说如何加载ROM吧) u! S; `/ e9 S
1 ~: z9 [% \* X! G
以MAME 0.148 DEBUG版为例:
. ?: D" S  ]5 E/ @) D
1 @, Y3 v/ L$ X1 e1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html7 [4 Q- U  \" ?+ D4 R
7 G3 \  o% P% k: n1 ]
注:MAME官网的MAME是命令行程式,没有GUI。
) V2 s, s; {' Z% t
" H, C+ K/ f. m8 j2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
3 }/ E$ w" U8 _/ |9 n) }, z
3 Q" U' _. l# Z8 N1 g% j7 n2 t$ w3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
; L' e2 L! h8 D8 C: y0 @! b( N
# d8 i* T  e# o2 p2 j/ ]d:回车1 o; p/ g" W% _

7 v7 O$ j) `4 n7 m5 m1 zcd mame0148b_debug回车
$ C: R; d( w5 B$ |: T
6 R: m% m6 O* h( S- J7 g1 b3 G如图1:  H* a% Z7 d: N. h3 d( a( H& z- V" H+ g
8 ?! ~+ n2 v# O. c/ V

! e- Y* t. G7 F. }% c& v6 F# P7 E4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
* O  f9 {" r" x" M/ @6 z7 X3 p* Q/ s9 o/ Y7 [

- G! E, u/ v" _* ]% |0 c/ [6 P: v' U- O" N2 Y, G/ x/ p6 p
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;* c& g% {, U/ T8 ~1 x+ e
& v: a+ @! M+ U& k$ G, e
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。; J" l- N" ~7 K% l! |1 L2 b
. T2 L+ m$ a* z1 s0 _
(2)如何呼出/隐藏调试窗口
/ K5 t. y0 h+ W, F7 D* u1 j* f
0 t. ~% U  ^5 S: [8 L5 _. u3 s1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
* q( u: X) b7 `- I. ?) @
: A$ i, ]* L" p/ o% o# ]& k+ h1 d& F% Q4 ^( Z) C
& D  A2 ?- z2 N3 x( @9 M
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
& A- I% q+ m0 G( R0 g& g1 `4 z4 X- O, n% ]: N$ f8 J9 V; H' j

4 R5 ^" w3 `6 H7 w, i/ L; v  x8 ~9 H- A  x+ [
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
( y0 \" u8 f5 h& w/ @
# h) e' l. D  j/ r(3)如何下读/写内存监视点以及程式地址断点9 H" S2 ^* R# J1 z; p

5 h( z- [) P- G3 w1 g5 b先说说如何下读/写内存监视点吧
: [$ E. l2 N% x5 e/ o0 q, J5 u4 o7 C  R% K& B3 `# s$ F& B. {
监视点命令格式:wp <address>,<length>,<type>,<condition>- P0 ?: x: `) b& a5 g9 }! f

1 m, H! _+ [0 K9 m; m: ]<address>是地址- h3 @* d" m! C
4 B! {9 j9 a0 y8 x1 {1 T) @
<length>是数据长度,长度必须用十六进制表示% K1 h) O1 p. v
' P: t" _0 l" d- {+ p
<type>是监视点类型,r是读,w是写,rw是读写$ Z1 c2 J1 A1 `; T

$ V% k0 {- L6 k. F- ]6 D; m例子:
7 {8 y2 e( {( s& ]' K. b0 f( N: Y1 u  N) B& e
例如对ff8569地址下写监视点,数据长度是1个字节+ M- z$ w  @' j* Y

8 M1 m/ J0 B4 h' e2 W" Q5 `5 j/ Gwp ff8569,1,w9 C' G8 R/ \9 ?( q

3 ?0 K3 G1 `; _例如对ff2235地址下读监视点,数据长度是2个字节
$ Y- ?; a% }0 `  h
" F" G( N! O" i/ O* z- j' Dwp ff2235,2,r  W  C3 B/ Z/ w/ I# e/ I
4 P" V9 u- G+ g$ j
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断- r. p8 @. q% s* e' I6 y

+ d7 J0 h$ b8 r1 l" C5 fwp ff7533,1,w,wpdata == 0- {+ ^$ d$ Y4 [. I
; @- x, F, E% _+ _, }0 D
以龙王战士日版为例:
  ]( r/ S- c) G) ~( g- A$ }; ]" V4 Y. E( X. E
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:- t' D4 G; z8 C) d. ~

0 B) |1 _8 F) y: K& y7 m6 X; C# H$ o3 [7 p' ~- w

5 s2 H* c1 q+ A( t  F6 C$ c
& Q) t( r4 g$ \; I1 i/ h2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
% ~/ G1 k/ Y& x+ V8 P& ?& c/ }  v% [4 X6 E# o" V

' D6 h$ o) u2 G  p+ t) Z
, |* p! Y* `; l8 z# r接下来说说程式地址断点7 J8 ^1 j+ N1 \+ q2 X0 L/ m6 Q
4 B% z3 U8 _/ V
命令格式:bp <address>
: Q. [# ^4 L  e9 {6 a. }3 ^, t# M: M8 ?! G3 a8 R5 l* H' K0 K
例如对000488汇编指令地址下断点
$ ~  S# s9 s; ?+ I7 l% A. F5 W. V, \+ M. |7 \1 `# ^! v
bp 000488
2 Q' `7 B0 z6 D9 X, s4 e/ v" E1 ?. P) B2 m+ `2 g/ A, `6 ~1 N
当程式执行到000488地址时就自动中断
$ e6 r1 j0 Z" g/ ?, O# K( U  v  x( [" t! t/ \$ b" l
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
5 {8 q' h5 N, f) @1 g
- G8 m, O% D3 d9 m* G有错误请指正。# Q4 O6 V/ ~/ j3 |' \8 G- y
0 o: r* _0 X! \; D! z) |6 a, c0 x
补充一些命令:3 d- r# W) A$ T1 f. A  K) E- H

* E  H* ?- q+ F' W9 x7 e"wpclear" 清除所有监视点
2 a( K. F: e6 Y6 @$ E; \6 U"wpenabld 数字" 开启监视点" L  c% @# @& G# b! w% i
"wpdisabld 数字" 关闭监视点) _) E8 O1 R4 }1 F' k
"wplist" 显示所有监视点" r) u; D8 X. I* P7 ]& i( }+ K) y
' B/ u# i# A7 k2 g7 V( ~7 \
"bpclear" 清除所有断点
( j0 p3 A2 q# I"bpenabld 数字" 开启断点) G* t( J6 I) B
"bpdisabld 数字" 关闭断点
0 O: T7 r& w* p) z' B/ c+ O( g"bplist" 显示所有断点
! f, v8 \4 U3 j. P1 B9 I$ e

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3582 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
+ W! \* {7 ~& I. h; t4 x8 t
& D' A2 o, t# Q" n' H. |2 W3 I以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2138 天

[LV.Master]伴坛终老

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

签到天数: 2581 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
. k5 c: N$ A% z% G/ n( `9 a2 x7 C
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。, E; M  s3 y# u5 q
$ y  L& {4 ^6 S4 e
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
  c0 w' Y  @5 o+ t$ \6 X; x
: Y% q3 }- z* K' pCheatEngine搜到的临时地址当然无法对应MAME的内存地址) p6 {+ M- D' ?

& H+ M; i0 |( U: C# Q3 o新版MAME没搜索引擎了么?/ O/ Z$ q# u5 [% R: G+ |% E0 V
晚上我看看
" Q  ~: d- w* c" H8 ]; j7 j& L+ X3 R! q* x2 z
MAME查看地址的功能还是有的
4 n6 V) v) X& f菜单里的第一个选项就是显示内存地址) r( M0 R4 X) ]3 I& c
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2138 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:; k; B  w. H  y# d6 t" l, i
1.DEBUG版MAME有作弊码查找命令% B3 q- R& o+ U5 @6 A' D

8 L- r4 E9 e* |" N/ x8 z, _命令如下:
. a# Z9 j/ M) s. ~. T* c7 i2 xcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
5 V4 z  I4 K! S" b$ h9 i' B$ S* J" Z<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
! I- N; q0 ]$ J4 x% q<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
! y4 _# b+ W0 ^& {; d& l; }<swap>是决定字节是否交换2 M6 u# v  }. g9 R. W
<address>是地址,地址必须用十六进制表示,例:0x100248
7 k  h* Y& g: I<length>是地址长度,长度必须用十六进制表示,例:0xfffff0 w% F- ]9 ?& z7 k$ x# e
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU6 l) B( ^) l2 I7 \8 ?8 p
% [, Q8 \* T3 ]
请打help cheatinit命令获得更加详细说明2 `3 P3 k" ~5 o+ X0 R+ n
, Q% x8 x" }) D0 @
cheatnext <condition>[,<comparisonvalue>]
  a" l6 u6 m8 X2 L, Q<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
: \& w, k- v' J( n3 z* ]- z. h* X[eq]是等于
4 R; c$ D# K/ u8 v. k& F2 }! d7 v[ne]是不等于
; _3 x+ U$ X+ y$ v2 V8 w0 L, y[de或-]是减少
& |6 s5 w& ]8 j- m* ~, h2 N3 }1 x[in或+]是增加/ s, m2 |( G1 [0 v2 L9 k
[deeq]是减少或等于
6 }9 h8 [& ?1 a; i[ineq]是增加或等于6 p; _  s/ L8 M$ |5 K  S. ^/ U
[lt]是小于: K- i% ?; \" t' x
[gt]是大于* |' X" {8 m: R  p( q0 q
[ch或~]是数据有变化
# @8 O  i# @( N; M
8 x* z3 A, u$ n/ j7 y, b( ~<comparisonvalue>: {0 U/ r( i! |/ i0 ^2 }+ I. j: U
要搜索的数值
  T  s) }2 q' N' \
8 @) _% H0 V/ F# r' l* T6 Z请打help cheatnext命令获得更加详细说明. {3 x: \5 x: }# M

9 M3 U* ?: B; d4 dcheatnextf <condition>[,<comparisonvalue>]6 O% X6 O# X8 B9 v. ]$ b
说明同上
  R' b2 S1 c/ w4 J5 Q. R3 y' z9 ~, G' q
请打help cheatnextf命令获得更加详细说明0 d& k% G0 W1 Q% ^5 I" r
) c8 q0 N# o5 A% i3 Z% d3 c6 f
cheatlist [<filename>]
( h; P/ {# O" e* {+ C. |4 F& V显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
. p/ ~# x6 Z. u! F
7 Y1 Y& I3 W& q( [( d6 q! F请打help cheatlist命令获得更加详细说明
- M0 r# y8 f. A! L- [1 b, Z, d$ y0 m) m  F  e* q
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
" b* ]% C# A- N
! ~1 Z/ H0 R4 C$ @9 I; Y9 |之后进行第一次数据搜索时要用cheatnextf命令来摸索
- s5 b' t! h5 D, j7 |1 L  Z; y8 A' h) l* l
到第二次、第N次数据搜索时要用cheatnext命令来搜索5 B* H6 f+ p) _  i# f+ ]4 }2 D9 D

& M) l! B+ t9 ?% s% P9 v3 v举个例子吧:$ y, B9 Z5 q7 s7 ^9 \4 Y5 [( O4 \$ _

# W: i# x9 T" @: k5 j, }以合金弹头X为例:8 y) ^: V4 ]# K- i* R2 W( j
1P生命数是27 I! t6 C& r# E: L9 w! [( q1 s

6 [6 d, U' Q8 x; s先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间; r6 ?) Y9 F/ \( |$ F# s8 ?) Q

' |3 W7 d8 I9 v6 V* F4 c命令如下:7 G' i) s4 a; V' E7 l- E
cheatinit ub,0x100000,0xfffff,0
& p1 f/ h: ?0 K# B3 ~
+ `) p: m/ J( D5 J再用cheatnextf eq,2命令搜索生命数2
4 F  Q2 S# d% w3 I+ ?; J
+ d2 ?! e; v# N+ V, e$ ^cheatlist显示搜索结果; \) v; ?+ a7 Z/ b

+ j% y1 N8 b3 R. O死一命后用cheatnext eq,1搜索生命数19 X" p. [" r7 I

  o2 L. z  u& k4 q6 w* g: Ucheatlist显示搜索结果* I9 S" [- ~; ?. B6 T/ O# K
.......  i# B3 b6 a# o0 u7 a0 \  L
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
3 t. f. i4 P. x% f0 Y7 [7 P- S6 V1 o3 _+ V/ a% ^- i
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。0 v5 T7 \$ u* N1 {, s, P" q

, r# w% z) Q) m/ `3 z. D% U没作弊码的话....
6 \& M. i5 g$ _# d
8 A, K2 T1 d2 i9 Z/ u5 ]% `$ |0 ~不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)0 a. d& F! U# h& Q$ }( t9 F# }6 I7 p

7 X! T0 p( G5 Z' }3 C2 |或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址): y' O' H9 X( m' `+ G& M: L2 o
: c% |  w$ S4 k
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
$ o  P& t2 d! z8 \1 [9 q9 e3 Y- X7 o6 A9 w: [' Y' x& k; M% H
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

: P% I* i7 L' \+ L3 S5 o; P( r, J2 G+ J2 `1 s, P6 c4 W
回114:
, D2 i- H0 l# E1 B" n
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)9 |$ X. M! r* ]' q& U; |$ K
2.没地址如何查询地址?看上面我给zsyf的回复
' Z; \  ~3 G% w, o
& _# J- b: F3 H, O6 b
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3104 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-21 16:25 , Processed in 1.090820 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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