EMU618社区

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

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

  [复制链接]

签到天数: 1997 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
' j# T' E% ~. i3 `* |) d5 _- ~' y6 M
(1)如何加载ROM! X. u. `2 g2 P  Z/ K. W. N8 N4 g

( J1 V7 T. {3 {6 x先说说如何加载ROM吧' E6 ]8 G2 u. A. Q2 l6 q* J

# \' t! U: ~* g4 N! N6 k以MAME 0.148 DEBUG版为例:! ^) C, Z" Y$ B: l+ Y

" t1 ?4 t" x* }1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
& C* Z" |+ E9 V( ]& Z$ Q- S. `- I
+ H. K, s1 H1 G1 k4 c注:MAME官网的MAME是命令行程式,没有GUI。$ {; m9 R, w6 H
; M  f; L7 j9 j) }( s, F8 C% h! f. Q
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
+ m8 p" i' r9 B- E, z* W) @. `# i" q* `' q, B- F; S
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:8 i/ Y; A1 i! Y9 J5 l; P
0 N/ S) a6 s2 ?1 w& N3 \7 r
d:回车
2 P# }+ V7 n* D9 \  @0 z2 {% y& i/ c$ R9 d4 U6 w$ `
cd mame0148b_debug回车
! h7 y# b2 J- N6 D7 o9 m& w
0 ~1 G8 q1 b* h3 u; ]. m如图1:
. \" k& P; Y; W( W
9 y5 e" h, l% Z, F( S0 W0 M
, Q, e) w7 t2 ]$ r) i! I4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:) }: Q! f* _, Y# S  f- J% u7 P. b6 W
6 G" ^( K% s  W4 \  z6 m
% P9 v4 [7 m2 \* E7 X

# C% C) t% \; U  |3 {! p! K5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;" E, e6 A4 D6 O8 Q

- a( r# }8 H6 v1 X; F& g, {6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
  ?- P" D: d5 R2 E8 E6 }0 E
5 X* ~! p/ ?' E$ n2 D4 h1 `0 {" ~$ l(2)如何呼出/隐藏调试窗口
/ X8 Q2 j$ Z, T. ^- T1 a: k- u1 b: l9 u) v. m8 n# _' C. Z5 Q2 H
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
6 J- y. w5 l/ s+ N( m" j+ e  J1 `
$ ]: w, n; Q8 M7 K0 M1 x/ v
, O' C- @6 V. G# [9 v
+ r' i* S5 p& |9 K& C. D8 h0 }2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:, V5 S7 w) D9 {  H9 C: @( W

) h$ I8 R5 a3 \- P  _2 s# t! s+ \& v5 {

. z$ R. ?$ a. E% B! p3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。$ s* T- m  E) O
1 J/ ^8 q3 O" `, j2 }
(3)如何下读/写内存监视点以及程式地址断点' ^! _1 [& P: }  o5 L' S! b
: ^1 ?  {1 c3 E# `* ?
先说说如何下读/写内存监视点吧/ G, i3 Y% z8 e, t
! R6 x* A$ x/ Q3 Z7 p( \  _  N; h/ S
监视点命令格式:wp <address>,<length>,<type>,<condition>3 A+ F/ M- B4 }- T% i+ X% Q

3 \, B; D* z" }+ T3 F6 U& P<address>是地址
: _+ T: B  w; A+ V
5 U% ~  i+ T. f; b' A' |& `<length>是数据长度,长度必须用十六进制表示
: X# q  D  v9 K3 m9 v
$ C. Q  |9 ^1 D' k7 j. i' |+ x<type>是监视点类型,r是读,w是写,rw是读写0 ]8 ~1 y- t" T9 H1 Q

9 g0 f2 J9 _& Y例子:1 \( M: d! j, v5 u5 d6 u8 t
3 z6 O3 |8 {4 }  O0 Z5 `* u
例如对ff8569地址下写监视点,数据长度是1个字节
2 @4 }1 H" L+ ]* d0 o; {" y" G" M! @4 h- y* _
wp ff8569,1,w
( y; G- b' g: \* L! S; o3 F3 `3 S% }) a0 D, P
例如对ff2235地址下读监视点,数据长度是2个字节+ P8 ]) ]+ w# c( h1 q2 F% P
* b2 f6 r% s7 ]5 {3 B+ L0 U
wp ff2235,2,r$ @5 a) ?2 D9 F. m& S2 T
7 g/ O: s; G$ b1 q$ g* a
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断5 Q5 y. j7 n+ a, i) Y! c* B2 P. W

; X; K2 T0 G' }. W4 Z8 Q/ N* Kwp ff7533,1,w,wpdata == 0; K: t4 {8 l( L& y7 S! ^

2 a* v) F# T# I/ S* k& n* \以龙王战士日版为例:
% F5 I7 o+ n) r
9 O- p1 ~2 K2 D! e1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:; |5 f; {# V6 T5 Z& \
! E% \( _: [& Z/ v. ]+ J
9 Q% L2 ~+ q) R! }) K

- R$ Z9 ?/ s" D! k, F$ v6 I6 ]2 W$ w! \! w
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:1 j; g, g4 S; V: _0 a: p* ?( e
0 H, ^, }$ i# r# y

2 M6 e2 N! S+ o
8 f" |2 c1 E) f9 S" k, f接下来说说程式地址断点0 B0 B% X. R- }, @. v* _

9 p' G  R, c+ P  f9 p命令格式:bp <address>, M' W; M+ j- Q* N- G0 c; [/ @
8 h& Q$ }: n4 J" t$ ]* U
例如对000488汇编指令地址下断点
2 n' m5 R% w3 g+ b. }
( \4 G2 F- T: i6 o; a  U, mbp 000488
" ?+ y4 ^. x6 T! [" w6 n2 p5 b- m- Q# v' `) b8 S
当程式执行到000488地址时就自动中断; {1 n0 ^+ h, r- P! K1 `1 I& J

  d/ |/ H( P$ Z1 U( l$ G  u* G$ L# S更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看6 J6 \  E* [# {! C7 f5 v8 a4 j' C

4 }' p  a; u& ~8 r. S; [有错误请指正。2 M8 |1 V) n) `2 H8 h/ k

6 W5 u$ I, }# M) N- z) u: R0 J* a补充一些命令:
3 d# [& g7 y5 P1 O
# ^8 v2 t5 t3 }- ?3 Q2 O$ ["wpclear" 清除所有监视点
+ u1 @2 \+ V  g# W* f1 q9 _4 s"wpenabld 数字" 开启监视点
5 ^0 h( R- x* g3 J# t"wpdisabld 数字" 关闭监视点3 g7 ^+ d4 j6 [
"wplist" 显示所有监视点
9 l# |5 W/ P2 n- _1 `# U% k+ B
8 F/ ]4 f, r9 j"bpclear" 清除所有断点
% J  s/ h2 T& Z! O- g. \"bpenabld 数字" 开启断点
3 H9 X1 A# E; ["bpdisabld 数字" 关闭断点
- j9 b5 I, c$ W6 O' y) H/ f6 A"bplist" 显示所有断点) J7 `8 X5 T8 U6 I0 J9 O

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3441 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
; F& H6 [: @7 B/ ^8 |0 J2 X" [' L/ J8 O5 c" {1 }
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1997 天

[LV.Master]伴坛终老

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

签到天数: 2562 天

[LV.Master]伴坛终老

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

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
/ x6 u3 r8 Z3 B. G, O- s. t5 A0 m7 Q5 j6 B; |2 i/ R# t: n3 R
CheatEngine搜到的临时地址当然无法对应MAME的内存地址+ @# n* D1 B' Y& R* E

. w& g* w% p( _新版MAME没搜索引擎了么?
: u3 H* U9 [0 J% M, c晚上我看看+ X0 Z, T( N/ m$ a2 d, F# t. y
. g/ h& W. v+ G
MAME查看地址的功能还是有的
8 w1 @) p/ Y0 \& E8 d菜单里的第一个选项就是显示内存地址. B; r3 E- t8 u0 m: I; I7 ?
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1997 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:" \% b5 M- t0 d. F3 A
1.DEBUG版MAME有作弊码查找命令
, ?$ \: ~* G; G8 l: }
+ c& O- N; h0 @命令如下:
. B' p& h3 x2 j2 W4 Y9 j+ Tcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]( n. X1 _; H( t( ^
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型0 ?$ q9 E7 w% e0 [) @
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)7 h( p3 m( G. X, P% h! X
<swap>是决定字节是否交换7 X) s# p. r# U/ S% I6 d5 |6 d
<address>是地址,地址必须用十六进制表示,例:0x100248
9 ?2 a2 j3 n' W0 g<length>是地址长度,长度必须用十六进制表示,例:0xfffff6 G+ T) g4 Z1 W
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU% B4 K9 J& Z- R! \% D; L
" }5 ~! K& o% C# [) r4 C4 t
请打help cheatinit命令获得更加详细说明: n2 X3 E6 l' m; \! z
& D" J! w8 B7 u% u' p9 c7 q# U
cheatnext <condition>[,<comparisonvalue>]
% q2 \9 G. [6 v6 F# q* t; H<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
/ ]  J4 |' w  k" ?* d' |3 T, E[eq]是等于9 x* U. ]$ _% N: ]  V7 X/ P8 Q
[ne]是不等于) J) p" l% G- E
[de或-]是减少' {( D, |' B/ f! y! F+ \3 p
[in或+]是增加# G) b- x& L9 k: g% A0 N/ O
[deeq]是减少或等于
" j( l+ ^! Q1 f/ z4 S[ineq]是增加或等于. h0 M5 _6 Y& q
[lt]是小于8 ?6 ~9 K. ^0 w# {( L1 x7 q
[gt]是大于) l$ B& t% U- G1 _) z( O
[ch或~]是数据有变化; g( H" _9 v4 y6 ~9 Z

! e% Y' r6 _! T% s<comparisonvalue># T4 D7 z7 g5 t7 m+ J' F2 A5 G! j( J
要搜索的数值
8 t- A7 A+ N0 p- I8 h0 x
  f1 N6 T/ N# y- l6 Q8 m0 F9 h( d- I请打help cheatnext命令获得更加详细说明
6 G9 [3 a' v5 t4 G
1 }( B, A* }1 ^& Ucheatnextf <condition>[,<comparisonvalue>]
2 |) Q  f: w- |4 \: i" R说明同上4 s' l6 a0 w* H! v

& T' X( C! c% P6 ]. H8 I& j请打help cheatnextf命令获得更加详细说明) ?. ?; ^& q5 K- ~' g  i1 ]5 Z
9 h  }0 [" q7 t& a! C+ E
cheatlist [<filename>]2 z8 H- v  L+ _) N
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
6 r! g& n6 O0 s
; ~5 z4 ^9 Z+ {: \) c请打help cheatlist命令获得更加详细说明
" s8 G/ F2 @& i9 h+ [! {! W8 R4 P$ S5 `. a
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
  M8 Q8 V" E- J) v% f7 L+ v
# s7 R5 {) F( R" P( \6 a) ~/ t7 y之后进行第一次数据搜索时要用cheatnextf命令来摸索
! i$ K& g8 o5 H, A8 X1 ~9 ~, F; R" {' E! L0 v9 @/ U; I4 {
到第二次、第N次数据搜索时要用cheatnext命令来搜索
& b1 k* @/ N3 X( f% P& {
/ {8 a9 t  S/ X% ]" y/ Y* N举个例子吧:
4 o. _6 c/ T3 t2 Y
2 y. \5 }0 i" H. l' n# o以合金弹头X为例:
. \4 i% I! g# i0 `% D$ j) b  x1P生命数是2
! I" o$ N5 S5 j7 \& \; S* Q; ?6 i4 {
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间  ?. l: O8 `; K# \8 `

# Q1 X5 a* t3 Y$ z1 E* G3 Q" H命令如下:
. S5 \7 f: _* F6 S7 n6 m& ?cheatinit ub,0x100000,0xfffff,0( Q& q- [; [1 F  V1 L

9 U+ ?- ?$ K. U- N: V再用cheatnextf eq,2命令搜索生命数2/ @1 V/ {2 m  _/ D
& D6 {; C9 z+ q& Q  M
cheatlist显示搜索结果
) J: y( j1 Z' X( |3 y! [" j, m% X6 [$ b1 |- L7 B
死一命后用cheatnext eq,1搜索生命数1
- h+ O) ?/ o! w$ [' D/ w4 M0 |" V# {+ O
cheatlist显示搜索结果
9 R6 |7 W: n/ K8 n.......
* _+ N4 m! X7 P9 m* I直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果0 }9 x, t0 \) Z  N* W( b
2 A' J5 f2 L* j
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。, Z( t8 z+ x+ N% o, t8 A
+ b  X# c$ `) M$ r( w5 D: C
没作弊码的话....
2 B/ ?, ~8 U9 w' L% T  E* D# K
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)# q9 Y# r$ }6 B7 A

3 c+ L# \1 S0 G或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
4 y; X- Q  K7 j% y  W9 c9 g! L& c/ I. |6 q5 x9 m
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
$ x5 e2 f4 i# B( A7 j
) v3 z8 Z# h; h+ Y6 u5 c要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

- @% T4 a+ N7 g! H" S0 u& W: ?8 j' Y3 J; p2 I" x
回114:
3 f7 k7 }. I! [+ e9 R
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)4 ]* R% g: w; r2 c% W* ^
2.没地址如何查询地址?看上面我给zsyf的回复
3 {9 L. @0 A! j: l$ q

0 N" ^* T; \" p9 v- E  t打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2970 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-7-3 20:28 , Processed in 1.117187 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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