EMU618社区

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

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

  [复制链接]

签到天数: 2073 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
' r4 K6 ^. e9 {2 y0 A$ {' a+ \/ z; l' z8 T* V" X
(1)如何加载ROM
4 |" N# Y8 ?7 N; [. A9 C0 v- {
# C3 D2 v3 t; t5 |8 _; F先说说如何加载ROM吧
5 m# [) Q* a- G. u1 P5 {
7 d" J! |* e: N* \5 S+ ^+ B7 n以MAME 0.148 DEBUG版为例:
) U1 x% n( {* C! i3 ^) j9 E
  e/ L! }9 |' Y1 ]3 u, Y1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
  Q% p7 e% I/ E3 J6 ~! q% U6 G7 i- C3 }
注:MAME官网的MAME是命令行程式,没有GUI。) [. U0 [) ~0 h/ Q

9 |4 a$ K5 o5 ]' s$ \- M2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
4 C' V6 J- i& k$ ]! {) J% D/ M- V. h: K$ Y1 T, E" }
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
6 q7 W5 }( I7 o7 {
3 W$ }4 v5 ]0 j5 `8 Z6 Ed:回车
! x, v4 r% a2 \; l; F6 T5 S8 F/ y) h) H/ s
cd mame0148b_debug回车, \$ {" y8 ]8 H' C

* }; B$ B- t! Q如图1:6 E6 g8 |/ N8 C& H* b2 n( l

  F9 |; p9 s6 J' j5 d% i8 |+ m2 _- V' c# ^3 b
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:4 u' r, W' v1 J' o/ }

) s7 k7 V. i/ Z0 P) Z
0 Y: o# H/ \8 h# c1 a/ _& x
/ U# [( B) |3 w( y6 G- K5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;9 X( e5 v2 d% f% l+ H
5 h& v; ~# C7 G+ r
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。, A5 ]2 J  ^, r8 d

& S; C" s2 w, H$ l) l+ V' S( q+ D(2)如何呼出/隐藏调试窗口3 D+ s' a  M& L8 G
% [- N0 a5 X, {, |
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
: w  h# l4 o6 `9 Z( [1 ?/ q& Q; R& v0 U' o' M

& Z4 J3 U& L6 E- D: Q/ @7 T
& A; b& L' N; F/ z& D2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
) E# o# v& n/ [/ B( Q! L; D2 M7 K# _- n& z
$ @# f! o7 P6 V

3 M; x" M3 E( e1 @% X$ \+ i7 w; K' i3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。$ Y! P( g. v. i) h* Z) _) d: O

* s" Z( e5 M5 L. _# h5 p+ |(3)如何下读/写内存监视点以及程式地址断点$ h4 p3 @$ N0 |8 A( n" S

& z  e/ S) z; v- I$ _. ^先说说如何下读/写内存监视点吧
, R0 [! k. {" u1 d5 o
& \) j# x/ N$ r7 q监视点命令格式:wp <address>,<length>,<type>,<condition>
' T' [! w, O' ^5 d' V
1 {8 V, G$ k  c1 J, |<address>是地址1 u; u8 j2 ?& X# ^3 v) t6 L

" r; C4 ]: W) l! i<length>是数据长度,长度必须用十六进制表示9 Z; v: o" B7 r

( c" p1 x6 r8 |2 f" J) e' [<type>是监视点类型,r是读,w是写,rw是读写* @7 q) e+ U( L

$ L8 P0 |5 E- V7 C; J5 ~9 Y例子:
! g" R. f  |, R9 O* i+ M: K5 n3 b9 s; w9 J7 q
例如对ff8569地址下写监视点,数据长度是1个字节
5 ]( \  q: w" z* n" u" C1 H
' P# q# i5 A* @3 [3 M! O) H# |4 qwp ff8569,1,w0 ]1 I# X2 Y( e% p
/ j& {( G% n# O5 R1 e
例如对ff2235地址下读监视点,数据长度是2个字节
' o& [/ {; |1 @8 G9 r1 ~, e4 {) J- F& S
wp ff2235,2,r
, G/ Y+ L- d0 N' i7 [% {% C9 X3 X! `* h2 Q  X1 a/ |7 f3 J
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
$ y' U' W7 j; `0 T/ b) H
. _4 Z3 |+ z5 s: _wp ff7533,1,w,wpdata == 0
( c4 N  L( ^' e8 e4 G7 V% \
6 M& z! t+ @5 a: s以龙王战士日版为例:
& P! Z- x+ J% O: ~  f5 l
% Q4 ^4 f' D/ P+ \* D/ Y1 \1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
. h! ~' V0 W6 j) I+ ?! p) D. r: s( R9 `5 K) i; G

4 _9 h; C/ T% d! j* Z6 F1 c0 T; s/ h; P% q, x! K7 A
7 t, l6 w6 S* `: T$ n
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:+ w; T7 Q7 @; c0 r
: [2 e$ `' Y/ f% H
; n/ P1 w9 N* t) {0 Q+ z

$ n( ^; F9 i7 E0 e接下来说说程式地址断点9 ~6 z8 W4 J# X9 a& ]0 j* T4 B
; X; L, }6 m2 C* q
命令格式:bp <address>5 H- ]6 K7 i4 K" w  i, X

. i; C' e4 S9 g3 O1 i! p2 l例如对000488汇编指令地址下断点
5 e8 K0 a" b* L/ T6 L- j- ?, g' T- z6 H* }* m# w4 I4 L% x1 j9 V+ `
bp 000488
' r" r! h! J( |0 B
0 y, g3 {7 _, g% E/ \0 r当程式执行到000488地址时就自动中断; C2 w6 u9 ^. H

9 G$ j# o/ ~, [' O! C2 w+ |更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 Q1 V& i" K% r: B9 a* p

3 z! D2 P4 E' H! u! {! I有错误请指正。) o' j2 k$ |5 m! S9 [1 U4 n

% {* X" {  Y6 W- F* b! |# {  |补充一些命令:
* O# h* p; k4 w" K; T: H) t
4 t5 [2 V& u7 V( a/ ?3 G"wpclear" 清除所有监视点/ D2 u, [! E* x+ i; j! m% V, x
"wpenabld 数字" 开启监视点
( S3 L5 c% X/ {- |/ ]" _' ?' h: l"wpdisabld 数字" 关闭监视点
0 V% D$ X  m  O- B+ {: e. F  \"wplist" 显示所有监视点
  K* j; p6 T5 c. n& K
+ o7 c! ~* q* I* ]7 l"bpclear" 清除所有断点1 g6 B! ?# c4 ]: H! q9 F/ E
"bpenabld 数字" 开启断点
! v7 q$ F$ C) H"bpdisabld 数字" 关闭断点
( Y7 g& R* K+ @"bplist" 显示所有断点
- v* U% k* j( n# r+ ~, T8 v3 N

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3516 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽2 ~+ t. _" G9 s8 z( [- ~# \

# _* |6 i2 l* E( I. V' `以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2073 天

[LV.Master]伴坛终老

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

签到天数: 2572 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 - F  j$ i7 T& H: A% |

- t! X) l9 e9 g7 P: j8 k太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。, |4 S6 ~8 B. {7 n! P3 P

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

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 9 k) x' B2 R& l2 t& K

7 E7 {9 g: `; c0 e) X1 _, ^" R4 BCheatEngine搜到的临时地址当然无法对应MAME的内存地址
3 X5 X2 n2 [3 B" P) e8 S0 `$ ?. L5 r- c) d; S8 z
新版MAME没搜索引擎了么?
# {' ]  O9 A& F, I$ m' H晚上我看看. i6 _: T( g" i  o8 \% r

0 Y  K. M$ F1 E5 b9 ^MAME查看地址的功能还是有的% z/ Z9 l& l$ g+ X$ c$ d
菜单里的第一个选项就是显示内存地址
" g8 R% u2 ]. o8 z不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2073 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:2 `6 `) O+ e8 `3 U+ `( w2 }) v1 f
1.DEBUG版MAME有作弊码查找命令9 g+ z; R' P' |2 C7 M1 m
; d4 O. j' \% {) s6 W- x3 P: b
命令如下:
+ ^# U7 {- P1 U1 y* u% s. wcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
! |4 G3 g6 I! {) }5 S<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
4 k7 I% i- K* c3 f: ^7 k<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
& y! e4 _3 e$ E9 \0 W4 J<swap>是决定字节是否交换7 E# ]" x0 h3 C+ g& w( m9 X
<address>是地址,地址必须用十六进制表示,例:0x1002489 u2 `% P' E1 j- b" C
<length>是地址长度,长度必须用十六进制表示,例:0xfffff. D8 j9 ^( P# U
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
3 |7 `/ B8 w+ j
" o- a/ ~: w8 K$ ]请打help cheatinit命令获得更加详细说明. ~; ^1 W, @, X# V3 t
" `4 c/ W* L. Q* J3 H+ c8 C- a7 x$ ]" l
cheatnext <condition>[,<comparisonvalue>]2 J9 k- q6 ?2 N! c8 h9 w6 _
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~], y0 ?* o+ v; l* u
[eq]是等于$ @9 ~0 x( D# x
[ne]是不等于
& ?1 j" O! a5 t1 f$ _6 }[de或-]是减少6 D1 r2 y  a. i! K, d3 }, P
[in或+]是增加
. \/ M* Y" y! W9 n[deeq]是减少或等于
" ?: d; z( a8 j[ineq]是增加或等于( K  v' Q- s" j2 h4 U
[lt]是小于7 Z6 H8 o6 ^* i
[gt]是大于
6 C" Y4 Y1 a$ D9 O. ^, V  q[ch或~]是数据有变化
/ X9 ]$ x; f" A
' @* J! a, q) E4 J& \  }<comparisonvalue>7 z9 O" W- J/ J, |( Z
要搜索的数值+ [- I3 d8 u* v& \
3 X5 V% L  I  C  Q
请打help cheatnext命令获得更加详细说明; t" y4 v1 }' h& e" q9 _' G& J
) h6 _, i5 x- E. g9 p# D& S0 \
cheatnextf <condition>[,<comparisonvalue>]
2 ]" T7 `+ T- p$ e说明同上
6 L2 v1 u( J9 |6 Q- o+ e  k' Q9 h( y: ]' [4 A6 m$ B
请打help cheatnextf命令获得更加详细说明4 a' Y8 {) ^6 \* L( @1 |

& K8 P  o& ~% c+ S: D) Acheatlist [<filename>]
2 N, s; ~2 t' y1 f显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件4 h$ g* E1 Q9 O+ B! z  S

7 Q/ I" |+ u/ D; ]! `) I+ L7 i请打help cheatlist命令获得更加详细说明
: s- y1 a1 i+ D% _; w: J1 z( p% \. _6 f/ \1 A7 z6 a
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
! X" p7 G( X# T% W# z% X5 O  t9 R- P) F8 T# Y- E0 r
之后进行第一次数据搜索时要用cheatnextf命令来摸索
9 ?' p6 @6 u0 l8 ]1 N. k0 P# T  x* y0 j! H
到第二次、第N次数据搜索时要用cheatnext命令来搜索
( b' j9 a# h% }( d7 Y& p4 k! h+ |8 n& G: M
举个例子吧:+ p' H: e$ W# \! n6 I5 \9 `! O9 E
, |2 h! u' r' N/ u
以合金弹头X为例:& l$ q7 a7 v* g) w: F5 I- O2 \9 p
1P生命数是2
4 H6 s( j- |( L! S5 N9 Q: }
9 d3 O' P5 n4 k1 Y" ^' s先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
( _- W  y$ ^/ ]( O+ R% |; \0 t1 J; l3 B+ i/ N( A
命令如下:8 ~: v1 a0 m! ?
cheatinit ub,0x100000,0xfffff,0' ^+ h. e+ e5 }- A4 O# ^
$ g4 z. @+ U6 M0 @( [
再用cheatnextf eq,2命令搜索生命数27 i; N" ^( i( j8 v
. @( P9 t8 Y' N+ J$ X8 q
cheatlist显示搜索结果* j" J! R, T/ j$ p" c6 M5 [6 e" ?# E
/ V: y9 s1 }0 ]& p. E9 K9 k1 y
死一命后用cheatnext eq,1搜索生命数1
8 q* |7 g$ ~/ M- O; P, u  C1 R
* t( y- y. W; R) B6 hcheatlist显示搜索结果: `/ a1 ~. {6 V2 I# \3 N2 B/ a& _
.......
: Y3 b+ O* W& ?: v/ o3 N直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果( ?) E( Q9 o4 c; d1 x6 D

/ y/ t) e/ v3 m4 p' |还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。& A+ c6 @; }: G* _4 y3 ~
5 }- Q( M* M7 ?2 i* \
没作弊码的话....
+ J( W: L+ \0 c- C$ g" ]. b! g% {
7 n7 E+ D: C: D5 C' f9 }0 |: d不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
8 d( U6 @5 Y: W1 P) R$ ^% n
* e5 V+ ~2 r6 r) ?* {2 K: @或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址), c. D; C" ^( ~
8 P# f" _) }2 k
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行$ A7 E. z2 [# q8 e0 p8 m, j# |
: [6 y7 `. X6 j* `9 |. ]: j
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
& a0 Z+ U: l. l. s' W& C; m/ B+ d3 ]
0 e0 T" Y1 r' V4 l, N) E/ Y
回114:5 R% x; O& l* m+ \
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M), Q/ s0 Z6 {4 u3 c
2.没地址如何查询地址?看上面我给zsyf的回复

  x. N  R" @" a. E& [4 p" h8 F
. v3 W2 g: o6 t3 S' ?打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3043 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-17 02:43 , Processed in 1.174804 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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