EMU618社区

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

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

  [复制链接]

签到天数: 1869 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。4 r: L5 f6 u8 w" e7 q! g1 w& E

8 O" S8 i5 Y" B* t. v, v( H(1)如何加载ROM
: u: Z) q8 t/ y' H% x  m9 p2 W
, H$ z: ]8 {( L$ d, }先说说如何加载ROM吧' ^, m* B$ `8 S, ]; D  |/ l! N

7 H0 \8 W3 N% j5 g  Z以MAME 0.148 DEBUG版为例:% @$ M/ W; |5 z4 _. _
7 j. X5 b- _- e$ A$ Q% k  S
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
; q! Z' {4 _: M$ q4 v. A% `- N' j% S( S: _" m+ j# H
注:MAME官网的MAME是命令行程式,没有GUI。: R( b/ P. W6 E7 Z: `

6 J. H1 L5 ?: t8 ]" i6 U' U2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
( \- c& A' z( o: }  u; e$ `" r  q& I6 |; a
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:  F7 i* N. ]! o
/ D. [! z# A) h/ O7 N
d:回车
' T- U( R' o/ h, U+ R0 [* l
6 i3 O. r. U1 pcd mame0148b_debug回车
3 f" p/ S$ J  a+ v  f- Q- X
" z3 {: @( u$ R如图1:5 S# P( B. e( y) E

* a5 s. Z9 \- b( m! p- \
1 B' e; J! d5 N8 w4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:" y; w/ n0 {  f3 Q3 Q3 B

% Y9 q3 t! P8 f/ N; _' _0 U. h: P9 o+ g, W
8 z- [+ s& L1 Z8 b, i4 r
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;. L" @) b# ]) h! T+ a: L- T4 \

4 P" i  t0 j) a5 Q+ s! V# b6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
) f. {" I( y5 V9 `
  u5 j8 g& ]9 m(2)如何呼出/隐藏调试窗口6 h$ f' e7 d7 g1 Q' F/ c+ v
3 H8 g  `+ j  Y
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
% ^- P7 @5 a! `  I* y
5 x0 G& r, F6 u9 A2 t/ t# F5 S( ?. o4 I/ t: N* v, c1 q4 ]
4 V& @  m- w1 H
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
2 p% _) ~/ C0 h7 D1 H( v, j" c( O2 }6 P- v( v! N
1 G. i; Z8 Y6 F, |( f- a

) D+ z$ k- |. V& z: P3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
$ J0 I: S& O  X: z, f1 D7 D( p* q' Y8 H' g- I
(3)如何下读/写内存监视点以及程式地址断点
# x  r- ^7 c" n% U1 W' t# a2 Z: B
2 j/ f4 ^* l" t! }! U% o! {先说说如何下读/写内存监视点吧: [5 k% \/ [, D, Q6 F

! `( A( l6 \9 I' V) T5 r监视点命令格式:wp <address>,<length>,<type>,<condition>
- v0 \2 b+ a. b7 u4 @
0 l- d" R9 |) D, E( Y: ?, k<address>是地址- f/ R5 O9 e1 ]: n

' w/ W7 a) x1 U8 S0 {. E<length>是数据长度,长度必须用十六进制表示
! q3 j% F7 z5 t4 x+ a
% Q2 L7 M! M" V. b<type>是监视点类型,r是读,w是写,rw是读写2 o2 s0 Y! M0 b* `$ j
) i7 N4 `* x8 Q$ Z
例子:  n0 ^3 g- @' G# X5 o6 ]

" j3 m4 y* _# I9 V7 I例如对ff8569地址下写监视点,数据长度是1个字节: W/ J! q" |5 J0 H+ B
, d: L6 j/ W6 ^& j% ]  W2 ^8 c
wp ff8569,1,w
) v, W' N& ^; @$ G- A
1 W9 _7 Z8 b/ z; R( z- a' {6 b例如对ff2235地址下读监视点,数据长度是2个字节
' ~* y" S! l5 D
0 I3 \) N, E( _( n9 m" V7 swp ff2235,2,r
3 L& ]# Q- C4 M* T4 j2 _6 V8 T
2 \- s8 E* s0 p6 {0 O例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断: |+ _0 b! x* t
1 @3 O3 i1 f9 @  J9 \" Z# G" A
wp ff7533,1,w,wpdata == 0
4 a( u$ B7 R  a6 Z, T; Q8 ^/ k, c* y% H
以龙王战士日版为例:
3 _0 @* K. M3 w& B$ R; ]! p$ [+ \; Y- l$ k$ _7 W; G# X
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:& o2 ?+ d7 r, W7 T4 J1 P
8 q3 G: T- p$ z% V% t/ b
6 [6 Z, b; N( d# I/ s8 r! q# u

( b$ K6 x7 c" N5 J5 C' p1 A; v
: A. b* [: j& v$ c; W- p6 C$ k- l2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
, S' E. @* m! l% \" y; L8 s! \' |, K  E( J4 o6 v$ C" l8 q& z8 v

4 e) v' a! l% q  h# e6 m: b" ]/ ]5 X
% v+ _$ \5 W' C1 R, ]接下来说说程式地址断点3 E9 Y. C2 I+ h; ?8 p- D4 }* N: a" K
- S# V" y$ e7 @! x# V
命令格式:bp <address>5 J! t8 v+ T7 X2 T3 }" d6 `) l! m9 Q
, q. H; P4 q3 w7 a# h% @- S  ]
例如对000488汇编指令地址下断点
: e$ ~0 G; h5 a, g% E" p6 x
1 N4 f4 O* w) g: l. d/ P* Ibp 000488, Z4 e) \! b3 [
8 i$ Z! v4 D3 X4 Y
当程式执行到000488地址时就自动中断  E- e( @& u: z5 R- ~+ c

/ M; M( x1 w+ e0 e3 u- c. B更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看" [6 v1 A6 S4 U( B

! g8 N# S9 |: R: j4 ^9 s  C& S6 O有错误请指正。
7 P( r) ~) u5 {+ f5 ?) U4 B3 q6 T! K3 h, e; R/ I' [9 H4 t
补充一些命令:0 R' d8 |) e6 ^: }3 w
2 W+ n( W' c1 g; [; h7 V2 O& P7 j
"wpclear" 清除所有监视点
  M/ k5 K& P! S0 N& P8 t" c: t9 n"wpenabld 数字" 开启监视点
" j$ Y5 M8 T# U2 `- a* j"wpdisabld 数字" 关闭监视点
( d$ c1 E  \# i+ }) b% p& ^6 I"wplist" 显示所有监视点0 X2 A5 e  p% |; M* y6 L
  Z0 w: s& ]/ ^$ v' f* h
"bpclear" 清除所有断点
' I# |- k& z0 n) N1 v  p2 E"bpenabld 数字" 开启断点- ^9 t  |; ?' R4 w/ R( m! {" o
"bpdisabld 数字" 关闭断点  j; X* T5 _. I  P
"bplist" 显示所有断点
5 L& j6 u$ l6 Q& i( w' F. R

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3313 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
4 p4 J* u& e1 C' n4 S# o' r7 G4 b1 ?8 G! e2 G
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1869 天

[LV.Master]伴坛终老

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

签到天数: 2545 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
+ L: V3 Q5 H7 ]. d! b6 V* z: y: R( X8 r; \7 m: S
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。/ I8 z1 ?/ I* `6 K2 k
7 d8 ?' g. [7 _% r6 [' g
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
, f  G+ _. v* W/ i, u2 y' M, t, R3 g
8 e, R5 l1 w5 ]! DCheatEngine搜到的临时地址当然无法对应MAME的内存地址- y7 s, F* b. Q, G6 V; `

0 N; w& O5 s$ v6 b& j, E* O  Q- \% ~新版MAME没搜索引擎了么?
3 K8 O; ]  R! k- I, s0 e晚上我看看0 a! A4 P& W( }6 s
, m$ X/ X, U: K4 y  y  \8 f
MAME查看地址的功能还是有的, _' v8 S0 a' g  ?  F9 G+ f& C$ F
菜单里的第一个选项就是显示内存地址# i0 P5 L% E$ J- f
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1869 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
+ d2 y! X: w5 [( @" g; y7 h
1.DEBUG版MAME有作弊码查找命令
- H1 d0 h0 f2 Q1 K, ]; z/ H# N, _
2 T  Z' Y) S( R' R+ d命令如下:2 _6 z+ Q- K$ y6 L! @' d( O
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
; h. q# U6 f0 j: |+ A1 [<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型5 i1 `" p! z+ `7 y8 f3 v5 J
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
: x$ {* T3 u3 j6 ?8 {  \2 ?0 g<swap>是决定字节是否交换3 r, r3 K3 z; F7 o5 x+ v
<address>是地址,地址必须用十六进制表示,例:0x100248
6 h2 s4 E9 ]! {' t<length>是地址长度,长度必须用十六进制表示,例:0xfffff; _4 e7 s/ ~" u2 G7 V* `
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU# i+ _5 d( p& ?# S) ^

. L1 P: F% U2 g3 K0 {请打help cheatinit命令获得更加详细说明5 d2 C/ t( Z! l% W' C; H" W
# x& ^9 C. V8 L6 Y. S- ?0 {1 p# T, u
cheatnext <condition>[,<comparisonvalue>]0 N' m* F! x8 e+ c0 p9 O
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
: H1 S, W$ I4 R/ m: c8 K' g/ q$ D[eq]是等于
: G: T0 V5 L8 U1 W5 N[ne]是不等于
% K& T1 d* n6 j5 _1 F, {1 y[de或-]是减少
7 [0 B9 b& R5 `[in或+]是增加( n( w, i* `) x" \% j6 L
[deeq]是减少或等于& C! Q" j, r8 R8 R5 z: W2 p* u' P
[ineq]是增加或等于# b9 z- C; E; u) \. T! x2 ]6 g
[lt]是小于
! S5 n4 N  c/ X. i3 \[gt]是大于
) n$ `$ `$ r  i3 y. w. o[ch或~]是数据有变化
; R$ k4 k9 A4 Y% Q6 a4 a
- L% w2 D, C4 V<comparisonvalue>1 U$ ^4 x  k' o/ Q! r  ?9 D
要搜索的数值
8 `2 B4 A! b# x" k. x6 X" X: t7 }
- R( J' A" P3 o) ]! ^2 @1 P请打help cheatnext命令获得更加详细说明" G9 Y) b4 {, D* N# `& _

. ^* B: I# Y0 l+ Q! ^* j* X" H/ icheatnextf <condition>[,<comparisonvalue>]! L/ Q1 G$ @& Q( ^) k
说明同上
( [" |3 w& F% s3 V0 E% q) E6 i2 M0 O$ {7 _
请打help cheatnextf命令获得更加详细说明. [5 ?' M- q9 \4 ]9 ?: {
4 R" {  J# ~) Z6 Z
cheatlist [<filename>]
3 L; _% U/ ?% I显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件1 S: G" L% w9 i* P% t& q$ z

3 A+ ~& c/ e, y7 @8 K# L请打help cheatlist命令获得更加详细说明, w. d. s  l& @2 P$ m- S

7 Z: T9 Y! I- ?' b第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
( b, O1 G( R) a1 A, _/ A: a' N9 R! d
之后进行第一次数据搜索时要用cheatnextf命令来摸索
' F: F' y# b9 v  w* e3 G( r) S; _" i2 i7 D( B8 i, R! ]
到第二次、第N次数据搜索时要用cheatnext命令来搜索
8 k! ^- y) d$ b3 g* \6 v9 o0 C/ e' X( L
举个例子吧:
* v4 n: S' c% T1 m7 y7 L6 L& h' m: t6 ?4 ~5 r
以合金弹头X为例:# e6 L; f9 S. y( |
1P生命数是2
9 H( Q- C8 [* ]; V- x0 C
6 J* ]6 R4 J# B7 K先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间2 O  V9 X4 h" ~4 g
1 Y: S/ j; |* J1 s
命令如下:
# x4 m- m3 t# ^- q# e  ]* e; S, ?cheatinit ub,0x100000,0xfffff,0
" Z2 ?1 B% C& z2 P% q' a. S) w9 g5 s
再用cheatnextf eq,2命令搜索生命数2& x+ O. N/ p; E

  P. Z& `* w  d8 u+ S! xcheatlist显示搜索结果: R5 X$ o, \/ z- w8 a

, g  n* S! G5 h! {. {死一命后用cheatnext eq,1搜索生命数1
% {! L% o2 Z- g% d. O
) A# q+ w: s5 V) ?2 q6 h1 D" icheatlist显示搜索结果' w0 Q: W, J2 d: I2 N
.......
; C' d5 u8 q5 g' J/ e/ h, `1 u直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果( S3 x/ d" Z* q+ f

. Z) \7 g8 c1 l* ?还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。! @' U* J2 D6 l" e2 c- Z
! E0 U& _. @6 {4 p! ~# d
没作弊码的话....
$ ]. F% \" ]2 `& ?7 e
/ {# a% ]3 d6 n不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)+ T: H- I/ P2 C' [4 h1 _9 e

+ u6 @, C/ S4 o% ~- g或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)# {  g3 O9 A# x5 q7 g- u
% V. J! E; u7 e3 r1 j& ]
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
) Q  [  J% S$ n% U
- G3 n5 w* ]/ @8 k- Y8 D* s+ L6 a要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

' P$ Y& \" h9 D6 r2 J7 m1 g- N2 S2 A& H3 a  j7 G' w0 `
回114:
$ b2 g5 y# {& ?- M& G
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
4 w9 \5 }7 m: P/ b5 F, u3 P5 S4 [1 T2.没地址如何查询地址?看上面我给zsyf的回复

0 ]7 h: Z! C: F7 i5 W: i8 Z$ J3 h$ z. ~- }& K& M: @: g
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2842 天

[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 12:40 , Processed in 1.123047 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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