设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 1910 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。- r. k3 g% k; x& s2 P5 _

: T, L4 y( g. Z  _(1)如何加载ROM
# z- r  G2 \- \0 G$ S) o, N/ e2 l3 c0 T" ~7 Z
, o6 h8 X, X- M: F# Y7 e, C先说说如何加载ROM吧! x- J% _/ ?& U4 X4 y% T

5 Y3 s  ~3 Z- W- U: t8 j, w以MAME 0.148 DEBUG版为例:
  f4 Y" l4 F$ h" Q# D# `  A/ S, J0 e) D8 D- }& L; f
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
2 T7 v6 V; r* N2 V) `
7 V6 @& Y5 W: Y7 h注:MAME官网的MAME是命令行程式,没有GUI。* b2 L) z  |" }) X- u# N
2 `, A7 e: u& T% O8 R5 Z
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
: D6 p( _6 a: I+ O, e4 U& q
+ G. m' S; f2 s  `) v3 D" z3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:. Q& n4 J6 `5 u* ~& m  e) q% N6 N: n( s

9 O: H& F& Q2 ?1 d- V, Gd:回车7 \3 ^6 U$ o2 ~

# Z$ E: w- g! `3 ?. u* e1 fcd mame0148b_debug回车! ]7 p3 y0 |  D

$ J$ U* {6 C% j4 ]' a# q& ^. j如图1:/ u# v- @! Y, f& z" i- ~$ ]' i+ N& s

6 m4 G- L: J& K4 |& S6 [+ y: n0 T9 m8 Q- @9 V8 Q
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
( ^8 a7 m0 [7 a! h: _4 r, }: c" e
; u. `( ?- `6 i* g  D

" Z5 \# ]& n+ A+ U* @% F5 E5 ~5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;/ J" v0 O0 l* a, J; B: J/ t
: E$ ]& {# v1 T
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。1 ]- m- c$ B! J% g% |

5 j" P( Y# b. _  b1 k' c  I/ k6 K(2)如何呼出/隐藏调试窗口
. s: a/ ^8 e7 D
, n6 M, h+ \# D2 L6 U, \1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
5 k- r( a% {# d$ C/ O* l/ m- g" h8 h# ^( T1 |& H( ^; g
% m2 ^1 U& ?4 p& E( ~9 Y
, j4 f1 r" [' R4 k- r% l
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:; f0 t; W" W% X" J3 W. ?7 V

; d2 g: ~& ~3 ^0 a2 w& N2 L/ |+ `4 o% R' ?/ q. \  N6 {0 I! F7 F
% m: ?! N3 H7 f( C
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。) h* I, I" s  Z0 N1 U7 f
; d$ f. c$ m1 B" a0 |
(3)如何下读/写内存监视点以及程式地址断点1 ^# e, d8 Z$ Q; W

1 p" o! m. g6 d7 B先说说如何下读/写内存监视点吧
7 U/ R' c" S! A# y7 J. Z9 `7 w/ _# M1 [. u/ E
监视点命令格式:wp <address>,<length>,<type>,<condition>
7 y6 V" P5 \  `; q
5 o0 G* K0 q! N4 s<address>是地址+ A8 ^$ {/ r. g" z3 w# Z/ O# B+ g4 I

3 D2 h" C0 S3 A4 x7 S! r( a$ z- o- q<length>是数据长度,长度必须用十六进制表示' o. R( g' `4 i& R
9 G, y, b9 k/ X+ Y1 s
<type>是监视点类型,r是读,w是写,rw是读写+ H6 c* y/ v2 ?; u' H- U

& Y+ n/ o2 y( ]- o; _例子:* q* G5 V/ ]  f- i7 r9 F: ^  E8 H

/ N$ U2 n8 z( _% `/ t- ^例如对ff8569地址下写监视点,数据长度是1个字节
6 C. |& y' Q( ?. h; k+ S. F0 k" K+ Z+ ?
& Y$ X4 j. u5 @1 Xwp ff8569,1,w
; ?5 |5 A( f/ v$ n8 U' h! O3 K$ Y3 h9 ^7 ?3 V& `
例如对ff2235地址下读监视点,数据长度是2个字节
/ R9 N6 z% ]7 l; B/ a1 p: t" R( ]( D1 b6 G
wp ff2235,2,r
, ^/ ?. S- x' s+ i
; a; J  G1 k* r, t' f例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断: b$ Q$ x$ C! d& @5 m3 Q* ~% G

" }4 ^) I! W9 I3 swp ff7533,1,w,wpdata == 0
- G3 |( h% k* J# f$ H
( Z; r) O- x$ m% `! P; c以龙王战士日版为例:
( Z7 k' {2 {( c% |7 e7 K! N) s' }. Z
1 f- p0 ~! S$ N9 v5 S/ ~: q1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:) ]( N% p" s. l" {. F$ ~
9 z+ q4 R, D+ c) q$ b
) C/ F4 x2 m7 K9 l

6 M6 e9 C( X  I3 _4 h- k
' y  O8 D0 u$ r) v2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:& U' Z0 x, w9 k8 q8 M

$ o' F1 r6 N, d1 h
% O1 `7 J/ N( m  i5 t  ^
% V6 e6 Q1 [3 Y7 T7 f. l接下来说说程式地址断点2 j+ M! P2 ~" k/ }* E
& a: [% e1 Z1 F" L8 n/ y
命令格式:bp <address>, o: ]1 Q  I, g4 o# P
  Q. C9 Z& F2 h( y6 w3 j* ~
例如对000488汇编指令地址下断点
' [$ I- m6 O) Z1 i2 Y) `% A6 _2 B8 ?8 i2 r/ Q
bp 000488. N1 y1 ^# h5 L, l: G+ z5 y8 }
9 r4 R1 ~% D7 `' R" h
当程式执行到000488地址时就自动中断9 Z- P, Z' p* P. F% S6 Z
$ G, k' Q) p- e' W$ t% @6 G5 R: B% G
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
; n$ w! v9 [* q2 z7 a  S* V- ?# C( p( u/ W" j
有错误请指正。* A/ K8 W) W- `+ T: K5 p+ X
% ^/ ]& c6 Q7 _6 ?8 r9 H
补充一些命令:
( s9 O; _8 C9 v  k) G% x' W( L( H2 V: Z3 v, U
"wpclear" 清除所有监视点
- w# r( g( [% t9 @/ w"wpenabld 数字" 开启监视点0 u6 @: o9 V8 t, h; T. I
"wpdisabld 数字" 关闭监视点
# c# Q' V2 V5 a+ y8 |1 s) Z"wplist" 显示所有监视点( b+ F1 Y$ C! C" y7 C

2 E" `" @4 B& N- h& t1 C' p"bpclear" 清除所有断点/ ]$ W9 L: |9 d3 l7 h! D# ]
"bpenabld 数字" 开启断点
4 _7 z' ?/ i2 H2 r"bpdisabld 数字" 关闭断点: r9 p9 |- U" G- p- y( u
"bplist" 显示所有断点0 P8 Y+ r9 Q# Z# I( f/ ?% ?5 U8 S

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3332 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽) U* X$ V0 ^' i' q% C( @& L

4 X! h0 i% [3 B以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1910 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2551 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 + V( O; X+ ~+ d& b# |

/ P6 b% `) c; Q" }! ^太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。3 c# t: O. w" l1 c5 @2 `
; ?$ _3 w% `3 ^3 A: i) Q
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
6 t# \8 S  g$ s: ]
5 V; ?3 ]4 u9 A! k' B+ oCheatEngine搜到的临时地址当然无法对应MAME的内存地址) X( l# Q5 ?# K8 {0 ~  R5 P2 j

' g! J( L" `+ N1 F- L! p新版MAME没搜索引擎了么?9 p' x* x6 g+ M! u3 ^0 v
晚上我看看
4 i* n5 ?6 q8 u
* O5 _2 [! X+ l0 d( P. P0 rMAME查看地址的功能还是有的: I5 x1 c0 f) X
菜单里的第一个选项就是显示内存地址2 l+ H$ L; {% i8 ?9 l  q
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1910 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:& v" K1 R" r8 `1 b0 \
1.DEBUG版MAME有作弊码查找命令4 H/ D4 V& k, s8 m0 j8 e

  j. ^2 b4 C$ U+ _命令如下:
! k6 @( z  P8 {1 t1 Ncheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]+ t; D7 W% R' A8 f9 [# @9 \8 k% _
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
# S7 f1 z+ q* A<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
: t, i: I$ v8 k. E# M5 F<swap>是决定字节是否交换
) t0 C! Q8 h1 `! h$ x. _<address>是地址,地址必须用十六进制表示,例:0x100248% Z! R* D3 _6 W
<length>是地址长度,长度必须用十六进制表示,例:0xfffff+ t: h* `/ G1 M* ~2 }  x" u
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
' T6 O4 c  v5 m7 _0 N- }  r; U9 z# C2 W3 a6 M
请打help cheatinit命令获得更加详细说明/ _9 |+ i, t5 Y/ J9 }
( N( K4 {, w# j- G6 e
cheatnext <condition>[,<comparisonvalue>]
& e, K: y# g: M, O0 y5 ?( V6 @<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]8 J) [- B2 t2 ~3 d, L$ ]
[eq]是等于  d# t4 t& k8 d) u+ g# E
[ne]是不等于
+ p$ O& y6 S  G0 u9 R[de或-]是减少3 z6 @0 p, b$ J2 T: l" Y- Q
[in或+]是增加- Q! I) X5 f4 O& D4 P
[deeq]是减少或等于
! i# {4 ^) \9 `9 f: _6 E& ?4 _( Z+ t[ineq]是增加或等于9 b0 A) X7 v$ \: E
[lt]是小于
$ f; w- T, \5 m& B, s[gt]是大于( N$ c+ M# O0 J' h! u* y  ^( y
[ch或~]是数据有变化5 @  @2 D) K2 g# ]" M* U  u/ t
2 J/ x: J; W0 E$ G, D7 }( W9 V4 B
<comparisonvalue>! H% E) F, {# [4 e0 l6 U
要搜索的数值
& b% a3 X7 O2 Q$ L) ^/ ]$ ]7 u$ m# _7 Z' g! |' h/ W  B1 U
请打help cheatnext命令获得更加详细说明- H7 ]# F/ t# |) s! w% M

% L" U/ Y* U0 z  kcheatnextf <condition>[,<comparisonvalue>]
6 t* Y$ n+ M+ e! ?5 s5 r) D, q说明同上/ S1 T9 ]/ o6 P$ T2 I/ E1 r( ?. s

- a: X! T9 T5 [- d( A3 q; t* e请打help cheatnextf命令获得更加详细说明
9 y9 u3 c9 L- b" ~2 Z
! L7 @7 r+ ^& \; b/ `, w  {cheatlist [<filename>]% g& P5 d  k, q/ |* z* E/ H& M" g
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件* J. n$ E9 L) N' e
0 y. P0 M- }8 Z1 U
请打help cheatlist命令获得更加详细说明3 b, L' T) |# M" |
/ u3 L6 ]8 w. c3 R+ Z' T% k4 v6 W; i
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
, H$ u1 V( B' L- G0 p9 U, n! @" u; P# z* B& z  }
之后进行第一次数据搜索时要用cheatnextf命令来摸索/ E1 ^2 a6 J; t1 F" P
3 ^% m5 a0 ^0 c1 w2 C" w4 c
到第二次、第N次数据搜索时要用cheatnext命令来搜索2 e  M" k0 Y/ Y3 x6 j
3 i$ V( q4 Q! l* x6 @
举个例子吧:4 v# k; [, ]' z1 D- {
$ ]! k4 p4 I3 r" e5 s- _) \3 ~
以合金弹头X为例:
( D4 A+ Z/ k7 _3 Q) }+ L1P生命数是2/ i$ T$ A, ~( R. X) n5 z. O) n

0 G/ N# l" c0 L( n& W5 I/ a7 I先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
0 n, j. B: W3 L5 A1 \4 @0 G
7 Z9 o! Z8 }2 n. n  w6 J- T% v命令如下:! i! c! p  B& d- r& r
cheatinit ub,0x100000,0xfffff,0
1 h" `7 J3 o, c0 A: d7 D/ ^) n$ i' O7 n7 }. i9 H/ ?
再用cheatnextf eq,2命令搜索生命数2
( ]( w5 ]7 \8 Z2 Q& ^' ]6 P, M" ]$ X
cheatlist显示搜索结果: {6 n, a/ e" [( c
/ J3 c) i3 h6 q6 q( W
死一命后用cheatnext eq,1搜索生命数1
3 d; ~0 C6 f% D( i2 U! w0 R  D0 E, `5 @2 l% \5 @
cheatlist显示搜索结果- _7 N# N0 H1 h3 O/ T
.......& c. e: d  i: J$ x* C. Z, D
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果/ t- a) O( [# r; a- o6 O* f

2 J. t- }2 \3 o+ @, Q还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。9 r4 h0 j$ Y! O( b# g8 {
& [0 R: R* w1 u) }9 R2 U
没作弊码的话....
/ h7 F$ [6 \, ?; t+ h: R* H5 Y. S7 Q6 e
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
9 y3 w& \4 ]" |+ H: B+ G6 |4 e/ u. b) R$ S% P+ U) N$ `
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)5 [3 F8 r* S1 T2 ~
; J6 l0 o# E0 A0 U6 G7 h: m. {$ y4 K; Z
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
7 `% T- o: b; W4 |# B# }2 T9 x
; j4 q8 o8 k- [要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
' [( H7 ~: }' Y0 V
7 \+ l' _/ r* p/ R
回114:2 G. E. F8 A5 s+ i/ J4 b
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
) n! K' N  A& M$ }( F8 q2.没地址如何查询地址?看上面我给zsyf的回复
4 _' }4 T% P" y0 e  r) a

0 P! h  Z. j& L$ p# K! Z打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2876 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋

GMT+8, 2026-3-13 02:01

Powered by Discuz!

© 2001-2026 Discuz! Team.

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