EMU618社区

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

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

  [复制链接]

签到天数: 1834 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。* s0 ~+ P. t$ V; Q/ m  m# E  k
' Z2 L1 n% ?( j
(1)如何加载ROM8 ~, T+ q& X' z; R0 q

7 \  B- f' o  ]$ m先说说如何加载ROM吧
3 p9 R3 J- r# j5 J3 w) |2 N3 ]/ Z9 o7 D( }" ?- P/ C  v
以MAME 0.148 DEBUG版为例:
$ u, m$ v* p/ I& z% z! h/ H
% F' e% `% q0 E; l1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
/ d+ e; J3 c# c/ j& _% T4 w8 z
' u+ M3 i$ R7 U% r% M7 }注:MAME官网的MAME是命令行程式,没有GUI。
! ~" B8 {1 Q  |! {" r- s
% O6 l0 l* E, c7 u' B# c, E2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
  {, C+ |7 G' v) N; P
# C5 f+ P7 p, c  }; o& U3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
9 O) m0 G7 Q/ [, R" s* n  L& m- T6 m7 _. `3 Q
d:回车
" \- l5 c. z$ r7 r, W+ P$ r: A8 I/ N* O" m* D! [3 k) [7 X
cd mame0148b_debug回车
( D6 h4 P4 E1 n1 B( r& P0 ?+ |
  p5 x6 t  N3 I5 f4 j) v& x如图1:: c* n1 w3 X3 r- M8 D4 d! B
- m1 L3 Z' \# ]$ o% ~
) }3 v& E, l% P: x7 m7 e
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:  `+ E* y5 G' G
4 b4 z$ i) O' e3 Z1 d. i
# N$ I! G& o8 v/ I) p- e0 `8 D( a
: H5 L0 G7 P- c
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;6 D2 o7 ?; O) T& c$ N9 p7 V& q

8 A( U: W* t; \* C) B6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。1 b4 h$ S2 q6 h: v, V6 C

9 F- l/ a! K! T/ }! z' O(2)如何呼出/隐藏调试窗口: C% M, ~7 t1 t
! x3 N& z2 N7 w: {! V, U: g
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
( {6 Q& j$ T% E& b
' u7 I- H3 n1 h
1 n$ u4 F! K. b% R4 u% Z2 v6 {
! q3 u' B# [% `2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:! T9 g& ?9 Z) E  f1 D- ^! K( k
8 C$ l4 K0 ^, i; I
' g( U# E! P; a" w% Y" @( G; h# P9 J

: R% n' o* `* R* o6 J& P$ P3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。' P9 c$ `: v  b2 V. x" h: e9 [2 Y

  }$ ]3 T( P; \4 N. e& }(3)如何下读/写内存监视点以及程式地址断点* \( C9 ?3 k5 q" @4 J5 N
8 h4 O* g4 i9 z0 b2 y- U# y
先说说如何下读/写内存监视点吧9 _! N% `, f. j' k

4 q: ?! T% X- o! _  L监视点命令格式:wp <address>,<length>,<type>,<condition>
4 z+ ~& |5 |; U. G
% [8 n) E& y7 S$ Y. Y0 s<address>是地址
! |- y% u& [3 Q3 |( B/ `$ B+ w% k1 D! v  `; E
<length>是数据长度,长度必须用十六进制表示0 y1 m' A; f4 X6 i) `
/ C/ M- m: I& n1 y3 N! V. s
<type>是监视点类型,r是读,w是写,rw是读写
  s. h3 \4 \( {' X/ z! O7 f; n6 N  Q
例子:
# \3 j+ g: @+ ]+ g* K, d
1 X. U2 R  k! t7 f0 x! G例如对ff8569地址下写监视点,数据长度是1个字节4 ~# [3 X; s5 e3 H5 e9 O3 b: N) Q
$ x9 Y# e7 \5 z! J: h% l: C
wp ff8569,1,w
( J2 K+ c$ H  Q( ^- B4 `# f
! G' x- C( d4 M' d例如对ff2235地址下读监视点,数据长度是2个字节
! [( c9 o* t, ~7 `1 Z) ]: ^
  }; X/ |8 L! E# L9 L- ewp ff2235,2,r3 a; l" y; U& N5 d: f* s

) l: T  w0 `: E. k3 z$ A& e例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断0 [& v2 v% k7 V% R' [
0 W0 ]; ~  t$ {2 `) Y$ B+ A' W; V4 x" e
wp ff7533,1,w,wpdata == 0& }7 c2 |* {& p$ P7 B: G

& J/ s6 Y6 f  m* O1 O7 o, j: S以龙王战士日版为例:
# X8 K7 P6 o: X) h1 [, L1 Y( k, Z- d5 x
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:& o$ k' ^! ]8 Y

" ?6 b: j9 _0 H4 O4 ^! \& F2 m
) Z* F* v2 H  y3 [5 F% S; O/ j2 x0 U
% }9 T1 s* I8 y, _$ k
2 o' x# ~0 q* T; q3 m9 \; I2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
; ]9 F! h" |5 i1 N4 T" Z, o1 X5 U, m3 k4 o5 f

6 t1 B5 c8 Z( f  T  @- n, |* l* B$ V( C. ]9 l
接下来说说程式地址断点4 [- T' j2 u# a5 j5 {8 b( x
% J6 U8 M+ |3 b6 q( Q' l
命令格式:bp <address>; q4 G  X, W, O2 q& u8 k

  \  X( a5 b( M0 z例如对000488汇编指令地址下断点3 D" @9 e& {0 C- }2 Z- F) W: s

. L  g$ ?; `* {* Sbp 000488
, m, k6 n3 P4 F0 Q) R1 M4 L& U0 a: x  r4 b7 J
当程式执行到000488地址时就自动中断
8 r) G- o' h- f+ o5 z/ j" r. Y
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看# P; |/ P- n2 r" x1 t2 n

7 B( ^4 r4 z* @( [. Q( ]- [有错误请指正。
* m* B1 i1 Y. H3 o6 [
$ ]  w& ~# r8 M1 q9 L- X补充一些命令:. p, k. H+ X+ x3 t( J. ?) ?

6 H; T9 K7 ~) _) k" \"wpclear" 清除所有监视点
! F* O  D2 c3 X% w! L- `$ W8 D" |; [" T"wpenabld 数字" 开启监视点
8 C" j% H' a/ I1 y, R  M' I. h"wpdisabld 数字" 关闭监视点
: p* g. C/ ?+ R/ y( G"wplist" 显示所有监视点3 J( m% l4 N! j$ D5 `

4 W* _0 l2 I% q, C; s"bpclear" 清除所有断点3 G0 s% R/ b1 q# k! v
"bpenabld 数字" 开启断点: G# N$ Q/ X/ q: C% y
"bpdisabld 数字" 关闭断点' d6 F7 X6 J, _& o  c  n: w# _
"bplist" 显示所有断点
3 X7 T) s/ q; q0 R

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3278 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
- C; M& t7 A( s9 X
6 T. H9 T8 S  |1 y, t# V4 l以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1834 天

[LV.Master]伴坛终老

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

签到天数: 2540 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
2 z3 D2 C& ]# H$ c
9 K+ c' a, x0 x4 u& D8 Y' X6 e太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
8 r- ?, m$ H$ _2 q" o. A# t1 B6 u* l: u8 b
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 5 E" N# v& A/ X. S0 `1 \( [5 O4 y  `

8 l) M/ b2 V- v/ ?2 w  PCheatEngine搜到的临时地址当然无法对应MAME的内存地址
2 n0 A6 w& C. w* e/ ~" T9 b! F4 [
- I* B0 U8 a9 {) z  f- i* [# ^新版MAME没搜索引擎了么?6 R9 s# e6 K: }& C# l! K% W
晚上我看看
& Z; {% n/ |) j8 e- _8 V; Q
- {3 b; }) f  U1 ZMAME查看地址的功能还是有的
& v3 g. @' O$ T- a# R菜单里的第一个选项就是显示内存地址. \- h' _  P+ L+ ]/ w& \7 ^5 B
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1834 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
3 R1 T" w& {( ]) B
1.DEBUG版MAME有作弊码查找命令
' |8 `; ?2 M& K4 v5 v# r- j9 O  o* t# m
命令如下:
* g  h5 T- p7 ?; {+ ncheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
6 ?' J% r( f. x) K<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
7 O( h7 i% G( O<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)# ~# M0 b5 r0 k# k2 }1 }( U
<swap>是决定字节是否交换
+ c( x) ^* I0 k8 ?5 t& p8 C<address>是地址,地址必须用十六进制表示,例:0x100248
# r& j: J7 g; q$ ~6 ~4 z<length>是地址长度,长度必须用十六进制表示,例:0xfffff
3 k# _& e3 `% R* m+ v  u* h<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
( ^  }: ]1 @2 T: ?/ I3 {# ]: P; y( B# I1 z) L: O, W8 ^) P. u" u( C, l
请打help cheatinit命令获得更加详细说明
) o) i. e4 t/ }, J# q# H9 W+ v0 T" a+ ?
cheatnext <condition>[,<comparisonvalue>]
# m* e  B3 r; s4 M: l% S<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]9 ?" B6 R4 s9 {8 Z: }
[eq]是等于, |- I  [7 t& ~& ^' e
[ne]是不等于
' h5 z9 \- Z) N! L  ~0 y  p; E[de或-]是减少# j# j( ?. x& I* D) u& P, b, o
[in或+]是增加
) S% \3 P$ Q" b7 h) L1 t[deeq]是减少或等于
2 ]: {6 _0 Q) Q3 G) q[ineq]是增加或等于
* X' |1 R( Q3 l. k$ s! x' d[lt]是小于
; _) C1 G" ]- ?3 ?, b' b[gt]是大于6 l% N( p- E1 `) i* `# O' M
[ch或~]是数据有变化0 l8 \& e+ D8 O; S9 ~, V. K  o5 F
: y# |4 f4 Y' W/ g  @& E( c
<comparisonvalue>
1 k( a) U$ s3 x' p9 c要搜索的数值& I) u  E/ e. w- H* f3 k4 I' _; D

& w# g, l) k9 c! a请打help cheatnext命令获得更加详细说明8 c! a) Y8 j0 p; {: e3 `! G7 p6 [

0 E* D0 ?, k3 V6 m' Q& Dcheatnextf <condition>[,<comparisonvalue>]
. L! T1 ?; M1 E$ f! l0 x说明同上
0 N2 G! B2 m6 n! T! C6 \4 L* D7 u& e6 O! U4 |$ W7 o5 O' @
请打help cheatnextf命令获得更加详细说明
0 {; m/ P+ w  J  H
- X7 m% G+ D/ N' o- q4 rcheatlist [<filename>]
" D8 p! |$ Q9 F* ~6 E' ^1 f显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
1 n+ w- _; f) c! N( y1 Q% m, k9 X4 w  G8 {' X, Q. ?3 K- o
请打help cheatlist命令获得更加详细说明
9 K- r* f6 L) f! U
- R" Z$ D" O' R+ }第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
/ X  M8 q3 D0 |; Q. s3 \
; J" X6 l% w8 B  e+ N6 n! o之后进行第一次数据搜索时要用cheatnextf命令来摸索0 {$ F; c+ w8 Q7 c* w( ]* t1 r: i
# b, V! _3 c3 x- A( i
到第二次、第N次数据搜索时要用cheatnext命令来搜索1 h/ V# M  j/ X: W9 |6 l/ g: g; F

1 [- v: ^" e% f& d5 ^3 ?9 o举个例子吧:- J, P& |6 R; U* B  i
, G) _! n7 _0 E" F* h8 D" k/ ]
以合金弹头X为例:! \! S0 b% }8 ]
1P生命数是2
7 {$ R4 ~& B% K  a5 E) o/ P9 k* `. U5 {( g# x8 C4 p1 D) h* |
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间7 l- _( Z! @" y5 U/ Q
$ w5 A8 f. n& ~
命令如下:' g7 ]  R9 w/ l3 m$ [$ L# d# k8 e
cheatinit ub,0x100000,0xfffff,0
( S' Z: ?4 W& V2 S" t% Q6 ~  y4 }) r% {' Q& ?& T
再用cheatnextf eq,2命令搜索生命数2
, Z+ c/ e2 Q3 e6 k
6 [& z( z( W& Q2 Ocheatlist显示搜索结果
3 c6 i" f0 Z5 S# {
7 @# I! n0 g. E死一命后用cheatnext eq,1搜索生命数1
& d5 r* Z' [1 M7 ]9 M( }' [$ d  c2 _
cheatlist显示搜索结果7 T. i; n: N* D0 Q- N  _1 M) \: B' h
.......
; j1 {! e8 o! h3 W直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
3 d- R7 g: H. \) `9 L+ n* T
: Z4 r; ?, d; F- \$ I还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。! y% r4 m, L3 q' R, I

; R5 W0 q1 b3 M没作弊码的话....* E; a8 B2 L9 g. \. _$ j4 X, l

# Q& Y5 A9 |0 W! V; R不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
+ o1 l% I+ k; q+ _: l* k6 X, x0 Z1 X
# {1 Z; K+ h* v5 K" }1 p或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
+ L# y" u* s; E) `  O
* P' C7 p6 v5 ^$ h1 f, W2 ~8 ^2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
. V! q0 H7 p) r2 r/ A8 g. X7 E$ B2 m0 U, {: |
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

! n' F1 s! J" H1 ~7 |- x) d' ?( w- Y! {  I6 u; [
回114:
5 @7 W/ |; |' i2 e9 W  y6 i
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
: K* t* ?5 k% O2.没地址如何查询地址?看上面我给zsyf的回复

; H. Q9 W: d+ \7 U% j7 G( }3 X0 u4 e3 o# u4 a' N7 W8 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. 幸运榜 / 衰神榜

签到天数: 2807 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-1-19 15:07 , Processed in 1.083984 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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