设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 1992 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
+ Z2 F0 b3 h! B7 m/ d& L- |* r$ b6 M& q, t0 V5 d! e
(1)如何加载ROM
6 z7 p$ A$ I9 |$ o; d: I, m2 s: y9 v9 h3 ~
先说说如何加载ROM吧
1 Q  f* W" s) e7 V# P2 D: t2 ^0 \2 w" ]& z- \1 n1 x
以MAME 0.148 DEBUG版为例:* W$ P5 P! j! v  W( P7 B5 @8 h

8 c- _" v& F2 `& m1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html2 A& ?+ ], t  C/ a* J+ {
+ v9 Q/ g9 A$ m( N/ L( A
注:MAME官网的MAME是命令行程式,没有GUI。$ H/ b8 b  t& m

( B7 d- T$ R8 k7 @% W2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
  Z4 J) B$ H0 L" e
& [- w+ V( l, |, [# b3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:; j# v& u* A7 u& M
1 h7 ^, S) W: V) S
d:回车
. P) d& T; E  s. U: _# ^
, j/ q! B% K1 L/ v* M5 F( p/ ccd mame0148b_debug回车
, S) x1 x8 N$ v4 B+ z% _% Z7 c8 {
- l( U: Y. Q6 Q$ r$ G/ h  x- Z# X! C如图1:
/ D' ^, g4 e. ^* p% M# Y' Y" E# Z, p: p
. }, W- V  G7 W/ f$ V
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
# f6 F3 A& i6 F7 M# K1 G  L
1 o% ?  Y, P- e) K: K7 B0 }' v1 N
. s/ ^6 H7 E7 l9 u; e" Q# d2 ~+ r; q& a, z
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;  b0 C; e1 J1 x1 }' q$ t
* M4 D' d+ s2 c# _+ u" \& f3 N* N
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
1 U1 B9 N0 n7 Y/ Y% ]
! K4 B1 \  A# {2 A(2)如何呼出/隐藏调试窗口
6 n& z- s2 C. a) i. P+ @3 r: ~
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
0 l/ S* J: t- a1 A+ Q6 c9 i# R8 m$ F/ a6 t7 m) N! |
/ }3 Y( T# \. l6 L! U

: `# s5 L' R5 J1 ?2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
2 q, Y, F2 ~  a8 e
2 T  f2 y/ \) G% Z/ O' y
3 T; j+ P" Z  e7 r* R* {9 E3 W  ~7 K! Z4 A3 \0 _4 v
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
6 s$ w. R! \3 d, F3 [5 X2 E7 N0 i
(3)如何下读/写内存监视点以及程式地址断点
! d0 n6 T1 s  ^1 \
2 \2 p$ O; k* T% }, v, S) Z* A$ u先说说如何下读/写内存监视点吧9 p' I5 i2 g& m2 ?4 A' B
4 ?; A/ @8 m  Q) E/ r: u
监视点命令格式:wp <address>,<length>,<type>,<condition>
$ Y, J1 E! P8 D+ X+ h/ f$ Y6 Z1 r
, T- X/ |; Q$ e<address>是地址
# t  }+ \) O$ [$ q  Q6 e4 ]
& O2 G& q( e+ |! K<length>是数据长度,长度必须用十六进制表示1 i0 w5 z' \' I: d

/ T& e- f. y. O) J3 E, j  }( m<type>是监视点类型,r是读,w是写,rw是读写
# \0 R1 _4 W! s9 O7 a- M: d0 V2 E( s% K  e/ `( R6 v9 Y  j5 {
例子:
" l2 V# m) Y' h9 W$ r" c8 `8 ~& c+ U+ C% n5 O" n
例如对ff8569地址下写监视点,数据长度是1个字节, H/ o! Y8 j9 e+ n$ Z
, ?0 ~! v- d7 x
wp ff8569,1,w5 x% S2 V0 K1 t! d

$ W2 }/ T% u* U5 u. G; o例如对ff2235地址下读监视点,数据长度是2个字节! @% f* F9 @2 I+ G: B8 Q

9 d" ?6 k! T% I" {' L7 d0 iwp ff2235,2,r, b9 U* V- E' d1 \. p

( s4 q  a) O: [% {5 r- k0 S例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
1 H4 J) Z7 A0 `  t3 m6 K$ I% J7 [1 ~% B8 {
wp ff7533,1,w,wpdata == 01 h) ?( _6 F  X- R+ f

/ [3 Q9 M& H* {8 L以龙王战士日版为例:
9 c' b7 A: G+ Q3 T0 C# L) o
; `" A; M  o/ V5 [# l6 l1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
7 t/ V) M; Q8 ^$ y
8 w& Q" I% k: _& @3 z" h
$ K) A- ~* D& u. n8 a
6 Z  B- S" o% @. r4 m; c: F& I# k; V& `! N) V2 d, J1 _
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
( K$ P4 K* L! \! H# @( J- k
( W3 f3 I& G) i5 R1 ]! g9 I  A- d2 r4 H

+ Y) v1 J9 t- P" {+ T6 V& r" M5 x接下来说说程式地址断点
/ Q) y1 I3 N' ^+ N  o5 a* H) L* b, r; _. j0 i
命令格式:bp <address>
& E- I- {$ ], P3 w( h3 C3 v
8 _/ |' Z3 a9 z- b  C4 e5 }3 E例如对000488汇编指令地址下断点
! ?1 ]2 p: `# W7 N' r' q) R3 c2 N2 L4 U/ c& h% [
bp 000488
2 I0 O0 y* v' W3 Q" U! u" [0 j, T  @
当程式执行到000488地址时就自动中断
3 w& D, s+ Y6 i1 T! u7 U7 a
+ P. f8 z- F& A  k* Q; ^7 h更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看8 {/ \% O5 y7 R) n- N( ~

8 r" _9 F, B8 e5 D  i  g- h有错误请指正。
4 S. c% N3 b/ e) Q1 G9 l7 J$ Y$ Y- |* K+ R2 I6 `
补充一些命令:
& i: M8 D. \/ Y/ d% V
$ M+ `6 h3 T3 ~. y9 W+ ]2 h; O* r"wpclear" 清除所有监视点( {9 J) j8 o" C
"wpenabld 数字" 开启监视点) U& W+ P: q8 D: q4 g
"wpdisabld 数字" 关闭监视点
+ }% g: w9 x$ \' x"wplist" 显示所有监视点' P' s; ~5 H* N" y. M& l& y/ Y

; l! ?0 h% C: I, M) O"bpclear" 清除所有断点5 H4 G% y* o' }! d! U& c  x
"bpenabld 数字" 开启断点
5 [" L; E: s6 Z1 z0 e8 K: r% {"bpdisabld 数字" 关闭断点
9 n6 _) f- x( y- p/ a0 a* Y"bplist" 显示所有断点  h/ {2 H* \5 H2 ~) ]

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3432 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽0 c  f: H0 ]' _5 R/ z+ t
6 l4 n1 f0 ^  L7 d
以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1992 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2561 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
( D. i% {0 A& m7 _
/ q, W! H' F2 {2 \/ q太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
5 _* |/ X$ n  l  z5 ^5 q# _- @5 A: B# b  I
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
0 @3 w/ a$ b) n# C# u9 W, S8 q- v% o7 c5 A7 X
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
" h- n% P4 J( W, x4 }; e) U5 I0 O6 S
新版MAME没搜索引擎了么?+ V+ Z3 Q' n8 [
晚上我看看
* M) l6 k* l, {, W* Z+ X6 X. a) y
* C4 x7 H2 d: z/ ZMAME查看地址的功能还是有的# W/ J. c& f% H- j
菜单里的第一个选项就是显示内存地址
) @- m5 j" P- [7 x9 K不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1992 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:% E: f7 A5 U$ V) {5 M, V
1.DEBUG版MAME有作弊码查找命令
1 S$ K2 r/ r( Z( \$ V" S$ M0 v9 Q; J+ V+ j# P' M9 j0 R+ o
命令如下:4 G: ^+ K/ J8 t8 U4 G! w6 [
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
+ C1 D. p3 i7 R# N<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型" b( L6 q8 j) H) d7 o
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)# Z5 a2 `  U  f" r
<swap>是决定字节是否交换6 }4 J) I9 g9 u/ r  w% k& y: X6 v
<address>是地址,地址必须用十六进制表示,例:0x1002482 a* r+ ]+ B; d% t; z
<length>是地址长度,长度必须用十六进制表示,例:0xfffff9 ~/ d0 j! y; Q  b3 r
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU; L5 l4 w- q5 N. i; s! I
! m3 ]' Q2 E8 x$ M
请打help cheatinit命令获得更加详细说明
. y, ?1 R* U2 h7 j# H% @
2 Y/ `* a# u( ~( T" R3 Hcheatnext <condition>[,<comparisonvalue>]5 b8 |" n# l' `  H# ^+ c
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
) J+ D+ R6 ^; F+ g9 N" a[eq]是等于
9 E5 c! p& X: P2 z/ Z, R[ne]是不等于
9 u% W8 x) N" a: R0 ~7 G) f[de或-]是减少
1 T2 m% P; q- N$ ~. V$ T[in或+]是增加. }7 _8 `# t0 j5 ?% g0 O
[deeq]是减少或等于& R2 L' z' P' w; S3 \' b) p
[ineq]是增加或等于7 f, Q5 h" }% X& `: T6 V
[lt]是小于. S* |! P& k$ N
[gt]是大于
6 P1 z" O' Q' u) F[ch或~]是数据有变化8 R1 _3 C6 b! Z* h- K

" M9 u* s' \2 L$ i<comparisonvalue>) B, x/ ^, E* b6 b3 P) ?5 J
要搜索的数值% i3 L" I" d* g8 S& `* k) U) [$ K; c

' y" F7 c9 H* L请打help cheatnext命令获得更加详细说明; B+ s/ I& d. S

: C3 n4 L) X; I$ Ccheatnextf <condition>[,<comparisonvalue>]
, V* o+ Y0 v$ Q! ^- e. _- x说明同上
5 [# g" h$ J7 C+ L8 g
' Y: n" R. M" ^( I( P* c请打help cheatnextf命令获得更加详细说明5 D& Q. ?4 @  b" }; G8 w
4 n- l4 Q$ i1 R# u) P
cheatlist [<filename>]$ K) F6 }( ]4 d, f; s
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件( U4 e$ b3 s$ X+ a# l9 t
0 Y4 u& z0 O0 K3 Z# M
请打help cheatlist命令获得更加详细说明* Z/ I& f/ ]0 L* g7 v
2 z3 r, c, y0 B1 @: D. r2 i
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
* @1 x6 r) G6 E! m0 B% v; F) o
之后进行第一次数据搜索时要用cheatnextf命令来摸索
0 E3 F) _  q1 t5 p7 ?& c4 `6 W* v* W  `& z$ b3 K" C
到第二次、第N次数据搜索时要用cheatnext命令来搜索2 N& s; P( V& d; z. ^* s0 A
) v' ?5 w* p' a: V1 ^
举个例子吧:
1 i+ S% `. X' [/ M/ {
& E: v0 v& D( ]' {以合金弹头X为例:
) _( l' ^* ?0 T8 i) A  o1P生命数是23 L+ i/ D, d& l9 d  L. A
& z0 N; C8 U5 f* P% [; b% f6 E, B
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间7 V! n0 L+ Z' t* |* X
: f) @! F( d8 |7 u( i$ C( M" s) v, N
命令如下:& T& ~/ d9 L: c1 D& p
cheatinit ub,0x100000,0xfffff,0
- b$ n% B0 a! K4 N9 o) n- z
6 Y% S1 O9 d# x( B% S: v5 R再用cheatnextf eq,2命令搜索生命数2- p# k+ G+ K3 ~3 I
, e6 k' g- L- H8 W0 }' ~5 |" s/ r
cheatlist显示搜索结果
# v& r7 u6 m/ b& b- G  b1 o
/ [  D$ [" X$ `% u, x: b6 E2 A$ x死一命后用cheatnext eq,1搜索生命数1
1 o. J: p  ]+ [
7 V9 l* i6 U( scheatlist显示搜索结果
$ ], x+ G* Z) b: G2 d3 L# V.......
2 T/ ^9 c/ P6 S* A! `- I1 K0 S- C直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
* n) ?  ~  {6 R, d5 d5 `
! o. z- P/ |& D' u8 R% f- M还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。3 l/ K* V4 U4 @+ G& M. |

" \* t0 n/ I2 k9 ?) X! b+ v5 a没作弊码的话....# q' Y: N+ H; L$ y% U7 R/ i7 n

% k6 x1 W: b4 Y9 k4 W不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
: y  _4 i" j( ^: V3 U' C3 ^1 C1 g8 u
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)0 Z" Y2 K; D2 ?  u9 l# [0 |
  B3 i9 Y/ w, M0 ~- f0 ~6 }' G
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行8 B8 j% K0 b7 ]; Y1 g! n# E3 b
; z% I+ E" L2 _$ l% S% R
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

; z. ^, j1 D: h. J/ F4 Q6 f  ?: O% H1 R; _) U1 D
回114:  v1 o$ V1 B  p' O* J8 g2 j
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
* V3 R- j/ t/ J8 a) }. M5 [6 o! h2.没地址如何查询地址?看上面我给zsyf的回复

9 P. y, n0 }( H: x
& b5 `1 S5 T9 i7 @5 a打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2964 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-6-25 23:58

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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