EMU618社区

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

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

  [复制链接]

签到天数: 1868 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
( Z" J/ Q9 n* M5 n/ O& ?) P. f! A. f5 a6 X# S
(1)如何加载ROM  f; f) x& H; O+ M7 M+ L. _, A
7 f! c8 h0 W6 k, w4 W
先说说如何加载ROM吧
. ~: X/ @' o) ^
$ R2 ]& L' X' e+ h以MAME 0.148 DEBUG版为例:- l2 z+ z# P( J
0 X3 Q3 A; V1 }# ~; A
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
( J2 A$ X+ z8 f5 `% j$ t: l0 ]( ?/ }! f! }7 V, ^1 }
注:MAME官网的MAME是命令行程式,没有GUI。7 Q# y+ r1 d( @6 q4 V7 Z

; G. u! [, X. t) Q$ A0 g( B7 C2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;6 r: h. D3 O2 S+ k: h5 q0 Y: r& s

! ?* p2 N$ ]& u* p8 Z4 E  ]9 e3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
" Q( m  X; J8 @' {0 y5 J; X! V) {0 t/ k6 I* B& u7 H
d:回车
0 |! v4 Q- b! b1 e* n% e
+ n( S! l2 G4 O' m" D! ncd mame0148b_debug回车+ Y4 v% x# W9 R* A  b( B3 Y/ o

* i, n* J0 ]4 v$ G- Z- ]  `如图1:
* o7 u6 e0 ]% ], p4 C$ Q8 K
) c7 J( U- H* v2 d0 S# w* f% ^7 I* M# d3 a* h, F/ G
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
5 P+ q) I  C$ h% Z5 C- x) ~4 ?4 m# O5 n: U. f) u

/ D; C* m- j8 L; u4 `9 Q2 A& t& e
; A# H1 u' A" k% N6 a5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;) p- X& c/ h' I6 S* H& u
8 [8 r$ I+ s4 a/ N
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。( v5 W: o5 p# q" a8 ~/ ^% v
9 v( O4 E/ w( N6 M' G' p, j: `* ]
(2)如何呼出/隐藏调试窗口" V1 T2 ?, c" \9 A3 J
8 R. s& \7 j1 a) C9 G" w
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
& L; y6 Z* b7 _# ^( C2 B; B7 ?( d
& Z) a/ P1 A4 `4 B' C/ f+ F$ L3 {1 }$ \& k# B! F
4 Z1 z/ W( \  [4 u- t# _! {) G8 v
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:0 G- s1 U/ \* ~3 F7 l& {! Q
/ L* v- y$ D' u6 N+ j6 k1 G: N

) R! c0 U0 B9 L  {8 [) u* ~' J7 C! H. B3 \: `7 f2 N. x
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
0 B: \5 _5 l4 s! h  d
. x. ~4 n( L) t$ g(3)如何下读/写内存监视点以及程式地址断点
' b& ^# ~, C. c0 A3 e2 S+ y2 p3 \$ N0 e% f( z- V
先说说如何下读/写内存监视点吧
4 W, K) ]; y! D1 w* S' [. x+ t% R( c7 G0 P9 e) k. \/ f7 f
监视点命令格式:wp <address>,<length>,<type>,<condition>- @- x! I( n6 s. N# H! c2 }

* K( y- s, c! T6 m% Y+ ]# T8 G<address>是地址
4 M" A. c. D9 n. @' o$ F3 G8 G8 x% S8 \. }1 E% i  H4 J' n
<length>是数据长度,长度必须用十六进制表示
* O/ j8 k) w* k" i
6 W; b1 O5 L6 K<type>是监视点类型,r是读,w是写,rw是读写
% D9 J, d" M1 M! D* ?, B- j8 X" a  B$ J) B, M7 }! c- S3 K
例子:
1 j4 Z* n% q# U; p- c' _. J
2 D: }" Y& @# y3 ]3 i例如对ff8569地址下写监视点,数据长度是1个字节
4 A  P6 }6 W- j3 M) S) y% {, Y2 k6 X8 `5 \7 _; B# ~, {
wp ff8569,1,w. `: H/ v! q4 J* l/ m* f8 I

3 Y3 R+ W& b( a- W7 J" c% M8 x& _例如对ff2235地址下读监视点,数据长度是2个字节* t* r% n" V% H3 B% K, O. P* m# O

, g! _0 t6 I) J  ~3 Cwp ff2235,2,r
5 n( }  K- p2 G/ t$ Y+ }+ n8 p4 I7 r5 a% C4 q7 I
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断/ G! V$ O0 ]( D/ v7 I2 C* t1 _
9 \* F- _& @% [* X( O
wp ff7533,1,w,wpdata == 0- ?1 Y1 t0 @) }7 ^
9 j% ?: A) v" b5 n1 \3 ]0 M
以龙王战士日版为例:# n5 K) p/ _$ b: f( c

- R( C# r0 m& k7 L1 H7 \1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:& `* k$ _1 k/ `/ \

( o) W5 V. G- Q* m  W* L- Z3 ]
8 \% u5 ?' B, H, u8 N
" U& b- a9 |  C, k; b2 L
( Y* y4 r# V. ~+ n2 t+ S; g2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:& f+ I3 j3 S7 ~3 \! s
( [! I/ r- I7 I6 u: `
  q2 B. y$ S8 }7 e" |
% B; x  ?  X$ D4 X  ]% ]% L
接下来说说程式地址断点( K; v( }7 R, p4 S( n/ X

, D7 a# j+ Y# l. v# w" V7 ]  q  w命令格式:bp <address>
) ~$ y, h1 j# E& C! s4 x# ^" O: D+ l( y  P9 P# v1 Q+ i1 O/ M" R
例如对000488汇编指令地址下断点
0 T/ R" v! t3 v, R# s3 h5 |1 A
5 n1 V" P$ k$ G# c0 @( G( mbp 000488  C; C- O- m- ^0 ^( T

0 M- S" H! \- h1 p( E2 ?当程式执行到000488地址时就自动中断- L0 S5 d3 G( q0 V. F, J
4 A, |( ^/ M5 p3 X8 r4 h. o/ j4 X
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看5 N/ {" [: O! T6 S9 s/ _
1 p& L1 j# N8 ~) G2 ^. W
有错误请指正。
( }: i, i5 U: O5 H0 U. i/ ^& F/ X$ z; S- l+ s" _0 U* x* O
补充一些命令:
, C* u0 ]+ @& M. V$ }& c) i
3 I# b! I3 j# }"wpclear" 清除所有监视点  b# z2 p" O: o4 G( W- L0 ^
"wpenabld 数字" 开启监视点$ g9 U0 B5 r. M
"wpdisabld 数字" 关闭监视点6 l' R: _% T1 i& S9 U& U1 R% s' G; {
"wplist" 显示所有监视点
0 |, |, r% @: r2 l7 V" `
/ p  I' u; X) L3 j1 |"bpclear" 清除所有断点
+ d/ @' W* k4 f& b9 {"bpenabld 数字" 开启断点& d6 z& K- @7 O% \" S: `
"bpdisabld 数字" 关闭断点
7 Y; E/ T) T# L5 v. N" H3 q"bplist" 显示所有断点
, g9 M% {" i: [6 k# G

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3312 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽# D7 U- S# g; I9 j4 G! A
1 [" @' |) Y. N  u( H4 [
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1868 天

[LV.Master]伴坛终老

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

签到天数: 2545 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 2 M3 J# p5 l# s" e. R* \9 @

" e2 b: j1 ]' R+ x太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。# a" j4 m$ s8 K

* g" K6 |& ]( e. o* f7 j5 S! o1 M其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?
4 V: ~0 n. \& _: C5 s: m2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 * T4 |, t. p' z2 M) u

# |+ u$ M  K' |# mCheatEngine搜到的临时地址当然无法对应MAME的内存地址# C8 n+ V3 h5 i' x6 \

# S7 ]$ t- ]8 y+ t" T9 h新版MAME没搜索引擎了么?6 b4 e+ E9 C, W7 t2 w& F
晚上我看看
' o$ [# x) w& m$ u, K' w: t5 Q8 a% Y7 H' C! A) ~+ z
MAME查看地址的功能还是有的
0 \) y+ M9 W7 o- k' g菜单里的第一个选项就是显示内存地址; f) V" d# v3 Z  @! x; T
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1868 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:7 D4 L3 v; g. t5 Q6 p2 o5 B: u! U7 r
1.DEBUG版MAME有作弊码查找命令0 u% |, K/ \0 ^4 o, v5 [

! t9 s' a# w( Y) g% J1 w命令如下:
6 d+ D7 a$ j' \$ u. [% u& bcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]# N) O  R8 M! D2 |! u. h$ h: R8 P
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型8 f* n: `5 y5 \$ Q! `' N1 S: ~7 z
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
0 G8 _1 m( o9 ]- m9 c  v3 Y* u<swap>是决定字节是否交换
3 m/ s2 c5 {  `/ f<address>是地址,地址必须用十六进制表示,例:0x100248
" m6 l: r9 g! J) t  j1 S' D<length>是地址长度,长度必须用十六进制表示,例:0xfffff+ T! F2 v  `$ y( [4 W
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
( X, l3 i+ i, w. v- ?. U& ^/ |* N/ P1 `7 n  D
请打help cheatinit命令获得更加详细说明* a8 R! w0 f- ]- U+ M+ \9 J, |
% k. t4 B! h! L7 o5 c. }
cheatnext <condition>[,<comparisonvalue>]
% J( p) E! m) n  {1 R<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
- W, r) f0 H' ?( M: V1 K8 |+ c, D[eq]是等于2 o& w* C4 O  f8 l9 O
[ne]是不等于. h0 V: S% w8 E. _- S! N( U2 C
[de或-]是减少5 U2 y8 p# a$ @: S3 `" `
[in或+]是增加# H; w* p; N9 H  |
[deeq]是减少或等于, H1 O! t% K1 s$ {) T: N& t% ^
[ineq]是增加或等于
; J/ z! K8 B  r# W1 e[lt]是小于8 M( I1 |- [5 U# E" U9 V4 H
[gt]是大于/ t6 y- a+ t  y9 c
[ch或~]是数据有变化/ l5 F+ u1 N( `0 h2 \$ H3 L

7 W: U- s! m) B1 w; O- Z5 P  K<comparisonvalue>
  A2 ]+ u0 K! }+ c3 H; h  T5 E. z要搜索的数值! l- B! p: H  O/ \* Y/ H+ d

& w7 D3 T3 u5 D( ~2 p( i9 u请打help cheatnext命令获得更加详细说明
8 U, g+ |. p+ d* q, ]: ?  T7 G5 e
9 K3 d- L  X5 ~8 D/ scheatnextf <condition>[,<comparisonvalue>]3 g9 D; e5 W1 \# H1 h$ l
说明同上  p  j* l5 w( [' w2 a1 y- _
/ b  }  ~8 @6 ]& [1 x( H
请打help cheatnextf命令获得更加详细说明
' k" f1 ]4 n/ p$ S% Z( L' [  w) c0 Z0 s0 m! ~6 ~7 T' G
cheatlist [<filename>]/ d  h; M; K+ s8 m' v; x+ v
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
7 j  K* L7 O( r3 w  J/ e! ?5 o# Q; k- @" i* W0 Z7 ^0 X
请打help cheatlist命令获得更加详细说明
3 `( Z& l7 z& }
: _8 v( y) X) B$ H# t  O6 h. H第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
" ^  `7 F! i' ^  f& z& _. N' D* v$ O5 I  ?$ O/ J
之后进行第一次数据搜索时要用cheatnextf命令来摸索# P0 G' J) h( j4 L
5 n8 W8 U: a, m
到第二次、第N次数据搜索时要用cheatnext命令来搜索; [% h; b% L% T: W

8 U( w; D+ c, P- A举个例子吧:
& v/ ^, I3 X0 x- q7 ]8 ?! o6 g
: F% w# l2 c2 t- K& S以合金弹头X为例:
7 E" D! t, j* ]# V+ A+ u/ C1P生命数是28 O8 Y' h! `! E2 L( G2 H. p

5 H9 r! s3 u" n' Q0 n( R+ k先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间8 z5 f5 L: {& X9 x/ z9 n4 B: g% g$ h

0 q: H" W! R2 R( g7 K! s5 w. e命令如下:
1 B- ~9 S: {: }0 L! ncheatinit ub,0x100000,0xfffff,07 c( b: ^) A' l) V, Q* ]& E6 w
: Z7 n$ a9 o2 C+ t* ]
再用cheatnextf eq,2命令搜索生命数2+ Z2 M' b" v( G/ ]* {; E: D
$ O! Q) z* `$ p3 b( v9 d6 H" d
cheatlist显示搜索结果
7 X! C1 T6 t* i- f' H' {7 O2 {; C* ~5 M+ H8 o
死一命后用cheatnext eq,1搜索生命数1
' q/ G% |/ v7 i8 x. h. R, e" m4 B0 x% Y( s+ [( k' `
cheatlist显示搜索结果
5 u) L" C; d, o! |% `* f  d- ~........ v1 D1 I! {8 c- e& e
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果% i, Q6 ?2 \9 G/ U  S
+ f' I. U) @9 M9 _
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
# b" t" A( l9 x; W
' o2 I  v6 W' y4 I3 q1 p* a没作弊码的话....
9 o0 |* s$ H! Y( V4 v
  B1 h6 _" _+ T2 y不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)' Q! [! g% Y4 y" c; C

4 n1 Z" r" g) O- T5 [, o% ]或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
5 X2 y' g8 P: e5 j2 y, y" s8 N" S" ]$ d5 d8 A
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行7 f/ |* R" q5 r* L1 a/ A! @5 a6 R
6 f" c$ w& t% T( W
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
5 |2 r: A( Z4 a: i% \4 J) z

2 l, v. O$ `# @5 t0 d# H回114:. g' |; H; i- u- Q# x/ m
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)9 ^4 O8 T. I1 [
2.没地址如何查询地址?看上面我给zsyf的回复
0 y0 J# s+ t/ y' A! T  W0 j
. [8 C! g: \: y& g; 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. 幸运榜 / 衰神榜

签到天数: 2841 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-2-23 01:57 , Processed in 1.153320 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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