设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 1941 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
% z7 x( |: l, j# ^9 m
2 }1 i: E9 J& n. J8 l0 M(1)如何加载ROM
' y; ]1 M! `! ]4 E* g6 J' [8 I" R; Y: e
先说说如何加载ROM吧# Y$ n, o' I. z; ]* M0 E" z
' F7 \8 n, G( V# m! ^* U+ |. g
以MAME 0.148 DEBUG版为例:
/ Q/ ~) u  p+ p! A/ }5 o/ L+ F+ E
% U" F( x7 M- C. q1 Q& d1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html( _/ \# P% J( ^3 T7 F
' u- v: |. u- }4 T5 P' n
注:MAME官网的MAME是命令行程式,没有GUI。
8 v7 L1 S* x1 ?& z9 J$ S
: a( w, N# c" x2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
" d" ]7 _6 d% I. m6 }9 I, w( m/ ~4 ~7 O9 W3 E: c; b
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:+ Y' l( y* a" u- A, W
4 T1 Q- o1 K9 }- o& C) [' I
d:回车
: J: M6 {' s- ]" s+ d6 \3 Q; g8 L# j; k' Q5 x5 [4 U, B
cd mame0148b_debug回车
. Q- W* T% Z$ ]4 M: m# M+ s" f
6 Q7 U1 f- `& ]2 q) r! ^4 Z* c: b: l如图1:
: J" Q6 k( |1 p% p7 e9 C# O
( [( g4 M" S5 i( V0 }- Y8 [' j  F( y$ F: t% @3 h
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
3 ]6 p4 @, y8 c4 a$ w* Z9 G/ E+ O+ [6 s. j% c

8 }* f% m+ |' X* m2 U  [# s7 o# U& t% F6 q( E, ?( _
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;/ x3 {/ s6 z( a# V9 f# |

  }6 m/ f7 r. ]& w1 F* p6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。2 H1 I9 m% B" B( \7 G
' h- k& N5 i; S9 o3 I# B
(2)如何呼出/隐藏调试窗口
# s; X% u5 w4 x; ~1 j+ |. }1 _
2 Y1 N' e' G, t$ m; R% E! |1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
  O1 D$ N" t- p) I; g* Y1 P$ S' A7 L0 C5 A( O; s+ k# p( ^
4 L+ b2 q$ w- w* {
3 B1 N) d1 d9 o  v
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:' T1 w% T' d6 g9 y1 J2 v) X

) U9 q; O+ g  Z5 V" j4 \8 f0 o1 c$ f1 h
0 G7 ~/ K0 `& T/ l* n  X
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。4 D9 Z  L* r0 }; G. c
/ Q7 J2 B) D  b* y
(3)如何下读/写内存监视点以及程式地址断点
1 z6 u& q8 N% A; O) @8 C! L4 P1 C9 v) o) O
先说说如何下读/写内存监视点吧
' o& O  s/ q% r6 a7 y0 F1 ]! b/ k' A! ~% G1 p' k
监视点命令格式:wp <address>,<length>,<type>,<condition>: [3 Q' f' r; R" m! p! v! R
5 l1 y3 Y( r: j. }2 ]$ r
<address>是地址
8 V# Y7 m( I/ N5 K. P5 ^6 a$ ~  P1 w! j. g& u* c
<length>是数据长度,长度必须用十六进制表示
! d- V; p( z/ F7 T$ T
3 [' p+ W8 B3 j* \  r# w) x<type>是监视点类型,r是读,w是写,rw是读写
) C, }, w: J: w; F8 q) \
9 W4 e& g/ |! c5 N例子:+ X3 ~9 I! o: a& b7 c0 a

. T9 I4 c$ ?2 O/ j: A例如对ff8569地址下写监视点,数据长度是1个字节' W- O% v' t. N) Z

8 f" l6 l0 V4 s" m% Kwp ff8569,1,w
6 i" W$ R7 M7 I( R' V2 }4 ^1 n
例如对ff2235地址下读监视点,数据长度是2个字节. j% b  {! v' j' k: }9 z# A: p- P

% W- [4 W& }  F+ Y' E8 w# pwp ff2235,2,r
! E- w1 ~# _# h" i0 j1 n' }# z
) U# U' S' U, o+ D例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
7 E2 \9 e6 z/ Z3 v4 s
7 n& N9 I6 p% Y) Ewp ff7533,1,w,wpdata == 02 W8 |8 A, W; k3 R# l. D

  T7 g, |4 g' J+ y( i6 y7 P5 Q, C2 F以龙王战士日版为例:
7 s2 V2 f# b3 ~2 L0 `7 p: m1 T6 K% U& G: t/ J/ |
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:& C  @7 s) g6 m, H4 q3 n
7 g2 ^$ H& e4 ?& f4 A

* u& @; L. A1 L
4 m7 f: h, i- K  w  Q  _' U) d9 _' o- r' _
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:1 J) l0 L# L3 N" A7 v
0 W# ]9 E1 U& y, s+ E3 u6 ~
; k( ?0 l4 G- o1 Q5 W$ b. k
* I8 R1 L7 B6 }( {0 H% \9 r
接下来说说程式地址断点
* E% S1 B7 ?/ ^& }! r
; Y$ B* S& O8 b- b0 ?# M' q命令格式:bp <address>5 T( `1 H3 x6 o4 m

' S3 M( |2 @( T& n( _" e7 X例如对000488汇编指令地址下断点
7 J" P, _6 e. B, h1 C# [& E4 O
% }% n$ u+ H( W$ ~' R6 Obp 000488
5 M# t" P4 }% Z3 [7 b/ k2 a" S1 I
* Z' Q' g5 t) J) c1 m当程式执行到000488地址时就自动中断
- C' o8 E; ?% E; q, P. g) u! U$ s3 x" _& ~
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
$ N* E, A- o6 p+ r7 k( v( g& d
! F4 J# q; O. y( U2 C" f" O0 e- B' A有错误请指正。
" @  l6 x, p. o0 N% Z2 M, N' h8 n& k  `4 M' |& b
补充一些命令:2 g. `0 E. k- n% S# p1 t7 L& S9 ^
7 h  F4 c0 ?& d8 p$ W" b
"wpclear" 清除所有监视点+ o7 T- F7 M; z+ f
"wpenabld 数字" 开启监视点3 P" [) n: D, M  ]6 n- q6 d
"wpdisabld 数字" 关闭监视点
& \& R! N/ L+ P# W( o2 ?4 r/ k"wplist" 显示所有监视点  M1 D4 m2 E7 C

$ J( d6 f$ Y: w: s8 h5 K2 v"bpclear" 清除所有断点6 i& K2 a9 q& O# W, e- r* I
"bpenabld 数字" 开启断点: p2 S* ?, v' L
"bpdisabld 数字" 关闭断点) ?4 p9 P, O2 ~- G: r% _" j
"bplist" 显示所有断点. G& H# k' G7 K

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3379 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽; M$ V" {0 E) P* H: _9 q

4 M* O8 z2 a% ?7 N以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1941 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2555 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
' k4 `: X8 J7 ]. q  s
. H2 C% ~; P3 T+ @" ~/ y太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
( Y2 H. ]1 f0 U6 e
7 n+ D. y0 V0 x' ~2 [0 g5 D其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 8 Z) A- x, o; G. @$ I/ V
: u" @" Q2 g# Z  J  P' y
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
) d4 O6 }3 |' a* c. K
$ j9 A$ k( q* T5 ]6 O新版MAME没搜索引擎了么?% j! j$ I% y  [6 r
晚上我看看6 j) ]; s' i4 H5 i/ {( |( f) O
0 q2 C, O7 p; e, D
MAME查看地址的功能还是有的5 Z& q+ A& D. q' V  M. f
菜单里的第一个选项就是显示内存地址
8 u& X$ O$ t7 U. A6 K不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1941 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
/ }! V- o1 h$ m) l( ]1 \
1.DEBUG版MAME有作弊码查找命令% }1 n5 R! b6 L, @1 k) f$ Y0 b7 ^+ u
) _( u) @! Y  ?3 x% d3 M; F; V/ `) g
命令如下:& D* e+ X8 |/ Z/ K
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]: r, W' }4 ]8 h  C8 X3 {9 P* u
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型! C1 Y( T2 V' m' }6 H
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)& r# Y0 P, a) g" U! F/ A
<swap>是决定字节是否交换- \. H0 l% j% ]9 G8 c, z
<address>是地址,地址必须用十六进制表示,例:0x100248
* V- I9 G. m* R3 X( u<length>是地址长度,长度必须用十六进制表示,例:0xfffff! M; k  {2 Y4 I1 V4 N
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU. t) M  j8 o# S

  U( c( `; o) b/ P4 }请打help cheatinit命令获得更加详细说明2 M8 I, ?0 T" d% f
! m; h( Y5 ], i( r9 ?/ N$ F
cheatnext <condition>[,<comparisonvalue>]
2 L8 `) S. a) ?0 P<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
# B5 a& F! j+ F+ d1 v$ z[eq]是等于% \* K& A! c) n
[ne]是不等于
! y7 r3 g+ V- R0 x* r+ I9 Z3 Y[de或-]是减少, W8 q! Q$ X/ z0 u3 G0 Y/ p; X* b8 `
[in或+]是增加6 b8 `& G% S: F- M, d7 M
[deeq]是减少或等于
- `/ F2 P* f$ Y% O[ineq]是增加或等于0 P" s/ a6 u" |5 n/ ]
[lt]是小于) e- F# H5 `6 g5 e8 o% A
[gt]是大于
: t$ f3 y7 b9 h& ~5 z[ch或~]是数据有变化) {6 r' I4 |6 z8 C. R% Z

5 h- W1 X* ^* c% F" ~<comparisonvalue>
; |8 i% I+ F/ i, |% m0 y要搜索的数值8 Z: P0 H( v, F, x4 Q( M% ]
, R  V7 {# u, O7 A: |0 W# n% r- N
请打help cheatnext命令获得更加详细说明
: y1 B6 g2 S. h8 _4 j5 W5 B9 B$ _1 s$ C! J
cheatnextf <condition>[,<comparisonvalue>]/ @  h* S- ^/ h5 L" s
说明同上
6 @- ?0 g; U" Y
6 G/ K8 m! l+ j) N请打help cheatnextf命令获得更加详细说明
* b" X$ C" T% S  G6 C/ o- Y3 K7 W% S" @
cheatlist [<filename>]3 `$ _5 [5 N  x2 X
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件. |' I0 I* d" a3 ~( Q, @

$ l2 R; R" D3 H请打help cheatlist命令获得更加详细说明
5 s+ H8 C! T$ O9 g
: F5 W9 ^: _; X+ ?" ?) M第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
% Y& ?; A4 {; J" F6 W9 P7 |4 u/ z! a7 ]9 ?8 C; g0 v; S
之后进行第一次数据搜索时要用cheatnextf命令来摸索9 g, V( i# Q. s% r

9 ~3 ?+ ?+ G$ e/ Y到第二次、第N次数据搜索时要用cheatnext命令来搜索
( P* W& L* \: w) T* b& x0 A8 n: G# K& \4 Y9 L0 Q2 g4 U
举个例子吧:
3 ?" r8 p4 I  d) d9 u, U  p2 L& A5 D" m- N# f
以合金弹头X为例:
# M! M* |, ]" z! ]# {1P生命数是2  M( ?% e8 X9 N0 C6 Q1 j9 h! q; c
2 o. _) H" s/ \+ F
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间7 Y: G. `! N  v/ s' Y9 H  M6 k; A
4 h' s0 O: d; q: p) G3 g
命令如下:& U: u/ ?; d, Z0 u, ]+ K! k
cheatinit ub,0x100000,0xfffff,0
4 E$ E: N0 s. r" Q5 s# h
3 O7 G/ x, J1 R1 a$ G+ d再用cheatnextf eq,2命令搜索生命数2! x7 V+ F0 Q* [3 ~* P6 n! b

6 d5 ^8 c8 C; fcheatlist显示搜索结果+ q, N+ Y) O8 y+ D7 s
% j  }. f- S2 d7 O9 q8 y2 d
死一命后用cheatnext eq,1搜索生命数1, \. N8 x1 [2 ]
8 K* U; c. ?1 C5 ^9 P/ M2 ?
cheatlist显示搜索结果4 R: m) b3 f( s( m8 O5 ?
.......
1 g4 b& ~# @* A' A直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果" I' l) r2 g- L$ x" j
( o2 N; e" N. t" m, H  G- V
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
5 |  M' L1 K& Z# V3 h. i
) I2 B, d8 ?1 }. y5 r; x3 g没作弊码的话....( j: ^$ [$ n% M6 G7 K$ X

* j. f% e# I% K/ k% h8 R; {不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)$ B4 F2 q" z2 U/ d, M% O
* _. h) R! N8 {4 V& g* b! B$ p
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
) J! d% ^: G$ F# C9 `" S) l1 t1 ]) ?2 y  |) V
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
# P: ~, |& [3 e& V9 W, l4 S* W0 P
0 M' {5 N1 J$ J2 p要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

3 \8 Q& q/ ]! E) l1 X. X+ Z6 c1 ~' l/ u2 m; m* J
回114:9 T8 I; B7 a* N% W2 u
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)4 D/ ]0 [' S1 v3 `7 N3 p
2.没地址如何查询地址?看上面我给zsyf的回复
4 b8 s7 J" Q, G  c* G5 D9 N! X$ E$ z

$ G% h7 G" A6 P4 x9 M: u1 Y5 i打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2913 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-3 14:59

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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