EMU618社区

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

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

  [复制链接]

签到天数: 1802 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。( b5 n0 e; w& ?6 A
" v8 L0 _# q3 {; w) x3 [( _) V
(1)如何加载ROM
; i* r+ a- l9 q( K
+ B3 Z. x" a; h2 u: C* l2 T先说说如何加载ROM吧! t3 x+ \+ T* }8 A( I
4 q# a# m, }" N" P/ C7 c" O
以MAME 0.148 DEBUG版为例:
7 O0 L5 c6 H* X3 T+ F' V/ G: ]# }! N) k4 K- k; o5 g/ N7 j
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
/ Z# \3 @0 i; ?* \1 C
( _: n: }& v4 M% @5 _7 \注:MAME官网的MAME是命令行程式,没有GUI。
7 {# E) v) K5 Q6 N5 G  r9 K
& b" [9 l0 h) r. v% a" T2 z2 p2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
9 X1 T1 _9 {- K; G% ^
6 \) ]0 Y5 m9 n8 o9 r8 Y3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
) s; X+ u& p/ k
$ \, V% {/ P2 @4 t5 Ad:回车
% N0 |, [# J" ~( X6 w
" {1 ^6 ~0 o3 p5 x6 u9 e4 [cd mame0148b_debug回车# m& _4 S/ v1 _" c
6 p5 F" D2 c0 ]( t) E
如图1:
# e: G% i8 g* V1 X8 o3 a9 y  Y9 e* X" T
7 ^2 F. Y9 @( f; o6 s  V' W/ d
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:5 T7 h* T1 R6 f$ ]
. h$ s( ?  Z0 y) q8 p

$ Z* T1 a0 h. a, m
, y; u6 J* H; X7 y5 ^5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
- o5 O# }8 x( R
8 ~$ `- g- Q$ }, y9 w$ S8 y6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
) Z! I4 t8 }- Z2 i0 X* h* T0 ^5 w
+ J4 T" }! j5 }* T% i(2)如何呼出/隐藏调试窗口, @  `$ t$ ?* P; @6 a9 y

0 B9 S: L6 u# H" D: p7 C  \3 w1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
, z5 E  G( S9 Z0 i0 n4 i( N% ~# H
# f) `2 W0 `; W5 j8 |7 V
$ l! S6 Z9 l$ i" m, U" O
* J/ M$ i  G5 l/ M2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:: V4 _; J4 x% R4 k8 B
0 n5 [/ m/ z- L" v" }$ Y

2 l# V, z2 e9 R: R! n( d+ o5 X
$ r$ y# x$ @2 T3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。  D5 L# ]+ G  A# k

+ A# U' ^8 e. a6 ]8 b5 S: G5 T& W(3)如何下读/写内存监视点以及程式地址断点
# W; {5 C2 b+ B, x& b7 ~# a9 `: X' V. A) J, }( o
先说说如何下读/写内存监视点吧9 ^. _+ w8 Z0 z; q! H0 H& E7 U

3 v$ |* z  `: ~: g监视点命令格式:wp <address>,<length>,<type>,<condition>
9 N6 q) T  K! ?1 G) K6 v4 P* U) I  m' A. i; i- j: u
<address>是地址
! O$ I: x( |8 P
) M$ E# C, F5 |, Q<length>是数据长度,长度必须用十六进制表示
& W- e$ y( Z2 }! o- F9 @- {/ g" o, z. U" z4 `2 i% ]" G/ m" ?
<type>是监视点类型,r是读,w是写,rw是读写6 U- F, d3 }. f! `, s& k- p- n

' t$ B, s# X( z$ \3 l9 F例子:; A" Q% e  n- e$ w% J9 }( _. x
) w' f% \8 H! u# R# u( o
例如对ff8569地址下写监视点,数据长度是1个字节# B, T- m/ n7 g6 R* J6 O
8 \& c  U6 _4 m! F
wp ff8569,1,w/ E' g" S4 ^5 M7 k  o0 |) U8 z; |5 o
; B% k0 O. M$ U8 U: o- [
例如对ff2235地址下读监视点,数据长度是2个字节
( a! {/ @9 U+ @  s/ a! g' E6 w
+ }" K" `! K# t! G6 Y) f( b3 s" a4 Swp ff2235,2,r- |) }# T/ Q9 m  d; J
0 G/ n# Y/ t, }+ L' h/ n' K5 U4 d
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
( j6 h6 B  F; p  F) f7 U( o4 `3 Z1 l% q2 O; H5 P4 W% {/ i
wp ff7533,1,w,wpdata == 0
! @" y* k7 m0 K/ F& i) f: s5 W0 d: ?8 f
以龙王战士日版为例:& d" b7 [2 ]/ b/ q

1 }* M" i5 ]% A% {9 N1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
' H2 E0 Y6 j! V
6 ~7 }5 a/ T2 T6 s3 H2 I, ^3 K5 f$ A3 S, z
' w# k: s) I  D; X* X; m
' y% K2 h+ H8 t3 {+ x% u
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:( T2 }4 H! @: K( W; c2 t( N! }

2 x5 K' y  B" }) S' {$ k0 P" N. O, l
/ }! W" ~8 g: c8 j8 s
接下来说说程式地址断点, r$ t' ]  [9 q
+ p; ]2 c8 e1 D1 o* J
命令格式:bp <address>
# N7 n  b" N2 q( V5 v2 F, h3 S; t' K& F
例如对000488汇编指令地址下断点
0 K3 Y- ^/ h6 T# j# a% z
9 b: v' {3 R/ Vbp 000488( W6 e+ r  }& ]9 a  M2 R' D
+ p( W# x8 w- v  {' P
当程式执行到000488地址时就自动中断  @' ?1 C2 F+ f( q' r6 h$ y; ^0 I
+ J4 k2 {3 J2 D9 T) U; _+ \1 @1 {
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看1 b6 [# A8 s& g. k$ \

  s- z$ n/ ^6 c* i, {3 D8 B) f有错误请指正。3 w6 w3 t3 K# e6 y

" ~/ T5 T, W% C/ d7 @/ X8 Z5 y补充一些命令:
8 W0 y: {# F4 ]& g. Q6 b
# \2 p. d: ~: r: N6 V"wpclear" 清除所有监视点& U- d" `7 U' ]. [1 s
"wpenabld 数字" 开启监视点
7 C! Z' Q/ y! o* \"wpdisabld 数字" 关闭监视点
: I6 ]! s/ @+ S  y: B' s"wplist" 显示所有监视点
4 L% ?0 S3 h, p4 N% {6 A- f
, `: v! \, _3 s+ \"bpclear" 清除所有断点2 L& N5 ?) X" K: G; F
"bpenabld 数字" 开启断点, p5 W6 ^, E# C, I1 P3 B
"bpdisabld 数字" 关闭断点
! X+ y9 S; R& G) X"bplist" 显示所有断点/ K7 d# f  `& d# K* U$ @

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3246 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽, x. Q6 c' ?, c# p* z6 Y! [
2 [9 r' m1 I3 ?
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1802 天

[LV.Master]伴坛终老

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

签到天数: 2536 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
- x5 ?& ]* i3 F+ [! L% a" o- F5 ^1 X! y' Q
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。* |& H  a; n/ j; o
* E' d& T4 e+ [) H
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 ! v7 H- b  U! S3 [/ I: x

/ T) M* H! I# W" w8 b: eCheatEngine搜到的临时地址当然无法对应MAME的内存地址
  U# \6 u! A: m; R( D  E+ |! j
; }: s2 g+ ^% N4 k4 d" d新版MAME没搜索引擎了么?
3 @. }  r% r$ Y" ^- T( m# M晚上我看看+ B5 x5 Z+ }; t# L

% h* z2 J  L* R' wMAME查看地址的功能还是有的* s3 u; ^4 d! I" M
菜单里的第一个选项就是显示内存地址  x* A; D: S% V* ^' A
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1802 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
+ C( c: Z/ W' n! t% V2 J
1.DEBUG版MAME有作弊码查找命令5 k$ l. ~! s- a

* O3 I, G# b* o" ~' u/ z0 ?命令如下:
4 J7 ]( C1 G) Jcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]. f+ I% ]4 Q( p4 F' M5 j$ \7 f* S
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
1 t. ?' l) w( ^% W<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)" n5 H( a) g7 }6 D7 d2 _7 d
<swap>是决定字节是否交换
: |& ~# y4 ~. C8 ?<address>是地址,地址必须用十六进制表示,例:0x100248( E% y4 y4 C' R0 Y0 A5 a
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
# j' \& [9 F% E7 h3 A6 G<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
4 {0 f% p3 Y& b
* h* ]0 p' A: w5 y请打help cheatinit命令获得更加详细说明: {& G% y" @+ m, b$ V& V: i

) e# ~) {' s, w" f+ m  `7 hcheatnext <condition>[,<comparisonvalue>]
* [7 t" ]% y$ M7 v) E1 J<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
$ ]6 c% C3 A( S# F9 X1 F  f* U[eq]是等于3 B' F/ B) |4 W( A6 G. X0 H, N
[ne]是不等于
) G& ~( E7 c1 n" P[de或-]是减少
& h( J1 i! F: `% j8 X1 w6 r$ J0 q  n6 }[in或+]是增加* m! ?; Z4 R; m+ {9 G" x  a
[deeq]是减少或等于4 _0 {4 s6 H3 Q3 b$ c
[ineq]是增加或等于( f# Q7 G9 Z; F; G+ \4 \1 ^
[lt]是小于
+ m# e7 g! u3 j/ W9 y! e: B[gt]是大于3 o7 w, ~# o! B& M
[ch或~]是数据有变化
5 e' ^  I# a) W+ E! N7 [. X( d2 e/ Q1 o! K7 }- x8 E! z
<comparisonvalue>% g, V: k1 m  c4 D2 h
要搜索的数值2 D$ c% S5 P: H
8 W: z2 m# q% p: g- i& B" f
请打help cheatnext命令获得更加详细说明6 Z) ]5 G- g5 b& L4 A. F7 `
7 ^- n8 R) w/ t
cheatnextf <condition>[,<comparisonvalue>]
3 L( P- R1 h5 x( N, _说明同上
. M. m* K5 v+ k+ l/ e; ~6 e6 _5 u% N9 _6 f  e
请打help cheatnextf命令获得更加详细说明
. Z7 X- w5 }. w" B7 |6 f# X  p7 e8 }  b# B" A7 V
cheatlist [<filename>]& c7 j+ {5 c. W- |1 A$ x) X
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件' b* r: M8 S2 J

- V. U7 u5 Z2 O5 @! u1 P' [请打help cheatlist命令获得更加详细说明2 |- A7 _8 v' l  N8 S

& b2 R1 d. k8 y( U% g1 ?第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化% }2 X8 T0 B0 z5 v3 F
. Q2 E- D$ _( f. Q
之后进行第一次数据搜索时要用cheatnextf命令来摸索
/ n. U" `+ n1 D4 D+ Z6 l% G, o8 m& e6 {( \! ^
到第二次、第N次数据搜索时要用cheatnext命令来搜索
" |5 t* L( M0 K; S: n  H
$ G; E/ |& U. @$ y举个例子吧:! y+ z9 l+ O* V% m1 T

) H; L( n4 \+ w3 R( z/ @4 z以合金弹头X为例:
: i6 {/ E. \# Y8 W0 _1P生命数是2
1 q) B, d: z$ y& Y% I, I
  {" Q+ T, j& j4 I% L$ I# e# ]3 D6 N先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间5 L/ S$ Z2 l1 ~; i5 P& h

$ P) r! M0 X' o( j, D$ i" v( P# l命令如下:$ W, x0 n0 x; _& l
cheatinit ub,0x100000,0xfffff,0
' L. [1 k5 c6 I, @# z% D& D, H; l; h; U6 \/ ^# J( P, A
再用cheatnextf eq,2命令搜索生命数22 F) V/ b) h( J" A/ F" {( p
2 b1 _: f$ _" n- h8 M5 l6 @
cheatlist显示搜索结果! a. }0 m- D; O: L% y/ {8 F7 h& |( d
! M8 b/ ?7 L3 b* {: p: _( M1 `
死一命后用cheatnext eq,1搜索生命数1
8 c0 ~2 h' ^' }( U' A) L0 h* B
5 f7 m. t$ Z; l+ a0 x/ n2 Y0 q+ W' _cheatlist显示搜索结果
1 e9 i6 n1 ], }; m' u" z8 a7 Z.......* C7 j$ O9 i, G% `
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果" ]" X1 d4 l. c4 r0 N+ n
' L" a: j" A8 q2 K% ?2 m
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
0 i0 T8 j& h; i* G+ `/ [: R+ h$ B4 x0 t' A! @8 q( ?* O
没作弊码的话..../ ]- a9 A1 X* I& B8 ^6 d, i

3 j7 y  Q. y. s) P4 G不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
$ r. Z  M* ?' s& ^/ P; C! ]5 |* [+ I, T9 D0 i2 X7 s' J
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)$ w6 C: S. v" [3 ~) ^8 Q% r. v3 L

" }! c2 q) R0 l1 Z2 p2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行% g/ t, C3 b8 h

* }2 m, E' w+ S* X! m" x  D: z' A) r要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
+ ?4 S* P0 _( E) h& _5 m  N
: ^1 L) @8 K- p5 h
回114:
/ o! b" n7 N9 g2 c
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)% A* [6 N( Q4 r: _9 E  |
2.没地址如何查询地址?看上面我给zsyf的回复

8 o3 J2 g& E, p% c& F/ l
6 c  B4 A, ~6 c打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2775 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-12-18 23:07 , Processed in 1.083984 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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