EMU618社区

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

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

  [复制链接]

签到天数: 2118 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。! h) K5 [/ ]) a9 e& a6 P
4 `5 G1 g* C" v3 o6 B  s% Z
(1)如何加载ROM
, P6 f$ w/ ^, k& n5 F- p, g5 G8 W& _
先说说如何加载ROM吧* f  @* N1 W; C9 {
- c( B% I0 R3 i0 G$ A
以MAME 0.148 DEBUG版为例:
# z8 G0 j! A. z+ R" K1 |' `3 Z
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
* w* G. J* l% }" [8 m
. {0 i8 `1 l$ O  K& P' g注:MAME官网的MAME是命令行程式,没有GUI。0 j; _: P7 D% m! C

, Z7 M4 |7 d, z2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
/ x* J" [6 q" [# t/ F( q: D' t
/ M7 R3 m: Z9 R6 {: ]3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:8 T' @: ?( i  B2 ~

- a% z+ V0 b4 sd:回车
1 J" y! X/ Q$ |5 O& O* V
) e- d# U# D) w% i- Rcd mame0148b_debug回车8 n" u& ^) Q+ q- M; }
' b* T/ Q$ R) d  U0 d3 Q
如图1:
' {0 N. B1 C5 D* P8 `: c$ W# l6 b
! O# @- |5 ^) I1 x( V5 W8 K: w/ s% p
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:7 a4 I( j1 R4 Z4 x

( c5 V! {* C0 O& D/ c- b- ^" S- X& E- M1 n3 K" Z
+ B0 [+ S2 V4 k6 c
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
1 ]; Y# \; `& _; v& \, X2 {4 l; c* @
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
6 T4 E/ B" C% c8 W- x! b
% }  d6 X" T9 }) Q- d(2)如何呼出/隐藏调试窗口
3 I! X8 I. X* a+ p6 @$ S5 f7 k8 |& b; x
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:! N9 D! W, X, P8 R7 E0 V5 L- V4 A
5 H" W8 r  j% x. P: A+ p7 `

( E$ f4 c, u0 R; g4 F# ?7 M7 m8 x* K. X3 Q) e4 Y3 `, R  V/ ~' R
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
9 h" j5 m6 r. i6 L" w; E/ H( G# l& M! G' p$ S8 y

+ A: H: I9 O( k& C- I1 _+ `3 U1 k, G0 j% a4 l
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
) X# W; x' {% g7 Y- F
7 M" V' T% {3 Z9 ^3 K7 Q% P6 I& G' `(3)如何下读/写内存监视点以及程式地址断点
; h  I0 Y; T7 N. F. @2 C* P9 F# ?& b
先说说如何下读/写内存监视点吧
0 h& T, v9 I+ N
3 [+ |' Z+ _) z% ?监视点命令格式:wp <address>,<length>,<type>,<condition>. y7 h) g/ [# }: U2 I

6 @2 a& G1 ]0 V$ |4 m  N+ {  g<address>是地址) b# s# z4 q* g# i+ X- a

( S, f0 b7 H0 l& o<length>是数据长度,长度必须用十六进制表示
4 a( S' F! a3 F8 ]& W+ z* `0 f4 A( I& ]2 N: @! _! c
<type>是监视点类型,r是读,w是写,rw是读写2 k6 r/ {$ r8 X) p3 i* {

+ q  p! i& p$ @9 `7 C# U% @7 Z2 B例子:
2 Y6 ?+ d4 g: [3 V3 ^( |: d/ g) l7 x% d0 s% N
例如对ff8569地址下写监视点,数据长度是1个字节, f% A6 u, d7 h! Q5 u: i
8 {8 ?, _6 N0 N2 e# E
wp ff8569,1,w
0 M$ v  u9 z2 p  Q
. Z- M0 J( h" b! g7 d例如对ff2235地址下读监视点,数据长度是2个字节/ s' V' Y6 [  P" \2 b+ _

5 \  x# T. u* o3 q2 ?8 Hwp ff2235,2,r
4 f& U0 T: q* ~5 y/ y
& f8 n: N5 ^. l# H' F0 }4 m例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
. X4 x7 ~$ r' T# g1 L/ p  Z" Q4 R$ Q# O4 U: x
wp ff7533,1,w,wpdata == 07 g, ]5 X/ F  w* K" F% S
+ _, l) e- n# Y2 L* f4 `
以龙王战士日版为例:! e2 K7 @2 i6 l1 K7 W" _3 i

8 n% L) r6 _9 e1 M6 ~' m1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:2 ]. ]) k5 l0 x( q
2 ^; q; ^# A' y5 i
+ I: `5 s+ t8 L( y4 M. O1 g

5 C- y2 `0 R' k( B) J
1 _  h. e* [( q- w5 d4 \2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:! _3 @' p; F/ Z6 O

9 h' c+ a5 x8 O$ n) F3 ?6 b' w6 H7 z1 D& A1 H( n! y

( K. `8 ^  ^) d9 ]- d接下来说说程式地址断点
; G! ^( T  \8 J# D/ d4 J2 K5 R5 M
命令格式:bp <address>
4 g% J1 P7 G$ y0 }% Y1 X) Z4 v4 A. }3 F+ b
例如对000488汇编指令地址下断点
5 N! U7 X* [9 ~! w, z8 _$ V9 b5 J. S" E! \6 L
bp 000488" ~& Z/ \# ^% _4 y  o8 b
! S0 w2 I: G( Z# p  J' O/ K( N
当程式执行到000488地址时就自动中断: t' `! a" P0 W3 d+ X) s* l

& ^: f, ~, K3 M* h7 ?, C更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看* I' z  o1 b3 b$ \. `  Y
" E& ]+ Y  y- E3 b% U0 ?, c
有错误请指正。
5 z' F( T, _* T! V7 j( q% a
* y4 A* b& i- }: M" f+ |( m% i补充一些命令:" X$ C  Y4 A7 ]1 A2 }3 q

% S' a9 d. U! ~5 _) I5 g  b"wpclear" 清除所有监视点5 A+ n4 I# z! j) v
"wpenabld 数字" 开启监视点1 C& Q( s! G- L% U
"wpdisabld 数字" 关闭监视点
  F3 _9 G5 ~: Z1 [0 k"wplist" 显示所有监视点5 u1 D" y( A  H& Q
8 \5 {( q+ Y1 N/ J. C* v
"bpclear" 清除所有断点2 ~. L: }- ^9 n6 C3 B) Q8 u$ `9 h2 I
"bpenabld 数字" 开启断点
, C4 }( P" n7 Q% ~  G"bpdisabld 数字" 关闭断点" M- U1 ^- d1 A) |
"bplist" 显示所有断点
; _" }4 o! {5 L: ^4 [' l- r0 n

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3562 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽* R2 R" h- E* z/ T
# a- a' I- U% \( `# ?; ~
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2118 天

[LV.Master]伴坛终老

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

签到天数: 2578 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 - g& R. W$ l) E6 d2 w1 R

8 _, Y) b4 j  o. Q2 h太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
6 R" m  ]9 v0 Y  _, q1 i
4 r. U$ |' s+ N4 C( W其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?/ T" z( r& u9 e# o2 c  p
2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 + Z/ E8 t0 M' D2 [) s  O

- A; F+ `9 F% X& t1 t* C0 J) X" mCheatEngine搜到的临时地址当然无法对应MAME的内存地址
5 b  _# n5 X5 u9 f2 \# C
8 m# G' y& H) v  v新版MAME没搜索引擎了么?
" T8 R. o1 z* j  z4 Z晚上我看看# h( X1 L9 ]- t
8 p/ }+ [- {# V3 t9 q0 N
MAME查看地址的功能还是有的+ @7 t) V5 i" Z/ W& S
菜单里的第一个选项就是显示内存地址
8 O$ U' v) q4 O不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2118 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
; y0 K2 x$ K! z6 o
1.DEBUG版MAME有作弊码查找命令2 I) p# O  @) _& G2 w8 d. ^

5 U' y0 `5 L. V1 f# X1 E+ a命令如下:# R; q7 y1 Y* f( L+ K# a
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]4 I% A+ d5 `: M
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型2 j0 ^/ x/ r- `5 l4 W
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
# p/ U+ p# t  P: e  I3 |% L<swap>是决定字节是否交换+ M$ `) [0 K7 O! e) U+ _' F
<address>是地址,地址必须用十六进制表示,例:0x100248
* V! j6 W  X# o- g9 F2 {+ ^: R<length>是地址长度,长度必须用十六进制表示,例:0xfffff
6 T  d' m4 E; A3 o<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
7 H; \/ q  q! r2 o' y. g
1 E9 H$ h7 X, |0 V0 }请打help cheatinit命令获得更加详细说明
8 _1 X0 t1 A( P7 O& B- X2 E
5 v0 q& |! o9 ?; D/ L6 Ocheatnext <condition>[,<comparisonvalue>]
- j1 d5 v; a8 D5 s! }- ^/ w/ ?<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]& J) S2 e& M6 W# ]; i
[eq]是等于
: `" q( a. G/ Y  G8 o4 e3 o[ne]是不等于
9 U+ j0 N3 n2 N1 j# k: K[de或-]是减少5 L: p+ x9 J0 D  F- n
[in或+]是增加
2 P0 B9 I) D: j. B. T; Z# _7 M[deeq]是减少或等于+ L3 K5 T% f2 x6 w
[ineq]是增加或等于
3 o, f  u9 K' U9 y, G[lt]是小于- T% C/ `& s. {# r
[gt]是大于
+ t) ^* ^& E5 X7 w" w$ i" a[ch或~]是数据有变化
/ O9 a  |! i* C! c: w% g9 L& z9 ?1 b! U0 V' e' t) c
<comparisonvalue>: M) s, b0 Y2 b! c' _7 q5 K% a
要搜索的数值+ M! `1 H- \2 }' b. s: P! K

, p+ ]" A: w  o9 s0 z请打help cheatnext命令获得更加详细说明7 N5 T( A& U! ~% l6 r2 c
& Y7 c. L. P2 k( ?* j# }
cheatnextf <condition>[,<comparisonvalue>]
" D$ @1 F& v# V8 m说明同上
1 B% x! _3 H: K
( B4 f: H4 H- Z请打help cheatnextf命令获得更加详细说明
( r  c" ]6 v$ _4 s% Y: P1 }5 q- l# P- _8 v0 B
cheatlist [<filename>]6 D$ ~8 _( C, J# [( Y
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
8 Y0 N3 R  i. L  D4 U9 p% C% L# E3 n' d3 m6 f9 G2 H
请打help cheatlist命令获得更加详细说明
( F9 h) \- ^  I8 n, f3 s, |2 ]+ W& I" Q! I# j
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
* E5 Q. W/ E, @+ i8 t, J, _. ^/ b3 s
, p2 g7 t. Z' G- H之后进行第一次数据搜索时要用cheatnextf命令来摸索
7 R: _; A* d) Y& ^
! C. S) j- _# j$ T. B. `到第二次、第N次数据搜索时要用cheatnext命令来搜索
6 ]/ ?! v( E  S4 t3 I5 _. ?2 {+ r0 |8 w1 s, l* |
举个例子吧:
  ^$ f1 H& r2 s8 A) H' w0 W; \7 Q( E
以合金弹头X为例:- D6 m! q' J* [0 J
1P生命数是28 z8 h* i+ ^: N- R1 ^( S+ @  j, _

5 f- F( s% `( C, }1 w先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
0 w* `) s' g" K+ S! l0 T7 H! g0 s# I8 o& _1 q! t
命令如下:
' `% ], [3 d6 I$ q3 F0 q3 X! z2 Icheatinit ub,0x100000,0xfffff,0: m/ Y7 `) W8 |% [# u2 q8 M3 F
! w* @6 e' \+ I# ]/ g
再用cheatnextf eq,2命令搜索生命数2* x% m! x. b3 A$ o4 ^

6 K# I( i# K, b4 V$ r  j0 Icheatlist显示搜索结果6 Q$ x7 N: J+ F$ L) J, C2 T0 E4 g
4 x  L& h1 e7 a- b( l" F5 S5 l
死一命后用cheatnext eq,1搜索生命数17 Q4 d* k, J: y' y7 u
8 l& J5 Q- D2 |! ]0 i* @
cheatlist显示搜索结果
' D" o  M( {9 I.......8 [" _. w$ E; S* `/ U- A4 Z; g
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果$ V4 w+ T3 V  R% g5 G

7 E7 l7 ?6 B8 B6 T- ^4 ^还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
8 ?# q8 r( _9 D( \) x9 y  \- s$ e; \9 R* @, k
没作弊码的话....( r( z( q" F7 R) ]
7 p( g5 q0 e1 R% X1 X
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
# A! R2 a/ D% w
, y$ x& C. P! h$ Q. y2 J" a( L6 o或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
/ v# r, z6 i3 H6 E3 M1 I5 n# B5 N" T1 ]4 j
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行/ U# K5 ^5 n; y

& H, K% f6 c" p2 t要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
( z1 D, l) [9 k) l5 [

! V+ U) m  s$ H; N! ?回114:7 s0 R' r+ W9 d( o! h* j
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M): i) a0 ?; S  E( X, K! V
2.没地址如何查询地址?看上面我给zsyf的回复
/ ]% D! Q: C' M* e
, ~* ~; P. X1 A9 f# w6 ~
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3085 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-1 21:12 , Processed in 1.083984 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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