设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 1908 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
6 h0 }- D- k+ @, e8 ?8 h- x; {4 }( Y; i$ O! I/ Y' b' W
(1)如何加载ROM
' E. L; }. e2 E  P$ m' V1 `  W( y( W( ?9 M$ R" S- F- k( @, Y
先说说如何加载ROM吧
* v0 Y# O* R6 m( V
. r. G* I: W6 c) ~0 T以MAME 0.148 DEBUG版为例:7 c5 ^1 E0 b6 e1 F1 ^
; ~' k  ^3 y' ]' g# J6 ]/ v
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
+ W, T! I- @5 x$ g8 w9 w; B6 a+ c' h) J' N. z
注:MAME官网的MAME是命令行程式,没有GUI。" H+ r+ p2 l( O5 y3 z
) @6 k9 [, U# d7 C( A
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
7 V( G2 R! y  ]. F$ U
! f' v2 b2 l; Q: X- ?' K3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:+ x% D1 x* b, s( }
# x2 }0 Z8 P. I
d:回车
; Y- d( C: s7 Y4 I4 {# \
5 @5 {3 v- ?8 T6 c" g6 o$ z4 U* w2 Ycd mame0148b_debug回车
5 m  x" r" Z0 C" Z9 M
  J7 |6 {2 ~# c; Z' ~# |如图1:
: M1 ?" j6 R# i. W9 n8 g: o. P% C( J, j

$ K$ p: S! z, Q  l% @4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:. Z7 `! a3 \% F/ `2 u/ n, l

* ?/ U* S1 ~4 f8 |5 H3 ~) n$ N: U$ Y1 }0 g* m
6 }: O' F% F* V# Y% }! d
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;- H& z# j0 P, V; V9 a$ Z

1 e, B8 e+ t& {6 @2 V6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! Q) ~4 {- Q" s; |0 Y. _; k: t  e
* x5 E+ V' I0 B# @+ |(2)如何呼出/隐藏调试窗口
! ^+ M' S& y2 M- c
( q4 S5 U# \8 I1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
. G' x' N* t/ ]+ O* B
4 H8 d0 @# ]. J) @9 G
: q- p* ]2 t6 F4 @
: i# d, v, Z9 M2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
- w  L4 w4 F3 j1 e$ r# X% R) z4 u$ R0 J7 S

: E/ T# O6 o7 q& Z$ b7 W9 R5 K
$ H  X) }/ B* r& G3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。, Q* @9 M7 t& ]1 j4 I# [, f

  k7 A# C0 k; _5 h1 b% u/ g(3)如何下读/写内存监视点以及程式地址断点
) u! E* o8 U9 O0 j4 |& u3 a) y' ^5 n, g
* ?2 F8 e/ @- {% B先说说如何下读/写内存监视点吧8 J/ s- f/ l# G$ b; ~9 g+ Q1 a

. J- F0 p( q5 `监视点命令格式:wp <address>,<length>,<type>,<condition>, P8 i" e6 {5 j& B

9 S  z9 l/ s0 h7 ]/ z( ]( c<address>是地址0 K+ k; t& M( h, V6 ]
4 G1 H4 p, n! p9 E) f+ u
<length>是数据长度,长度必须用十六进制表示
9 z. f5 j+ |  K3 u2 W) p' u3 K
) D! C2 ]* q# s; c# P<type>是监视点类型,r是读,w是写,rw是读写1 j0 m" T, m5 b& p
0 |6 J$ y( Z8 w
例子:
! J  j3 r6 ^5 Q2 J9 \$ H( q/ H
  }# D; R& L3 v8 D) a例如对ff8569地址下写监视点,数据长度是1个字节/ L* t- o3 c8 o1 W1 E: _5 V
0 @2 r* b# j! c# D# v
wp ff8569,1,w5 _1 }. v) \2 n: j
, {; j+ y4 h- @3 K# N; n7 ]
例如对ff2235地址下读监视点,数据长度是2个字节
/ `9 ^/ @! u$ X; C) g8 q& o) Z, Y) Z, o$ _" e8 I2 t
wp ff2235,2,r
) c& W) u: d. z' B& p) @/ S1 F  O# T$ P8 N8 _! J2 `
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断! F6 E" I. c$ Y
3 B4 m% q) ?0 u' _. h: k- z/ G- j
wp ff7533,1,w,wpdata == 0
- }) `( i1 ?/ F- X" p* {5 d4 `7 ]6 W; q: f! |
以龙王战士日版为例:
, i3 u) }8 M% b
7 X: q. L1 [* N" L; n) ?. i1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
3 Q* v, }6 Q: a% N* }, g7 |
+ v6 `: p% @! I7 @6 l2 q" V( s9 n; `& {8 F1 p/ z3 l* z% f6 r
- w! M: E9 q3 w6 E  H9 Z

: J5 S0 Z7 y1 k2 l; z. E; |2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:# `! m8 M4 d4 ]/ u# O
1 L. t1 k4 F! K8 q% N: N
- e: F, g% B; n9 u2 P! o6 }: P
/ r  p5 Y2 z. s1 q# D/ e& l" c' O  ~
接下来说说程式地址断点
% O4 n$ U/ ?: Z7 j% {
* O: u) d8 K* ^2 m" w; w' j1 n命令格式:bp <address>4 t. k2 Q: h5 b- r2 ?

5 r! v7 B3 A/ {$ ~3 X! d; y  D: q6 b例如对000488汇编指令地址下断点
$ H$ v* k) x* U& l
0 j4 I5 g6 f& e1 o& K/ obp 000488
5 |0 m& {# N" N7 o% Y
- c. W! P  V6 }5 |+ R  b4 X当程式执行到000488地址时就自动中断
0 W: t# v; c; ?% f7 U2 M  i& W( v8 o4 z
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
: q$ a  s# ?" l1 O1 ]9 T
# H! t4 c1 Y: G8 _' C4 }有错误请指正。
  D% a  o8 t. b# B; B: B( q" v- d: ?" D
补充一些命令:
* q0 L2 F1 E" y. K. F9 `0 @8 S( z! k" Q
"wpclear" 清除所有监视点
8 H3 d# O7 W% A4 r/ S4 P7 `6 P3 ["wpenabld 数字" 开启监视点6 z9 Z) e9 Q% F7 y: w2 j
"wpdisabld 数字" 关闭监视点, A2 _2 [4 w$ Y, b; J0 d
"wplist" 显示所有监视点( t) g% ~. m, i) Y0 W

, }: i; A( a2 m4 G' j, y"bpclear" 清除所有断点# Y3 G+ j" z; ~8 s2 k8 ~3 F
"bpenabld 数字" 开启断点
2 X3 b# P* k$ R* p: d"bpdisabld 数字" 关闭断点+ C& F/ @6 h; E
"bplist" 显示所有断点
+ a: k  @& @# ~+ V1 @6 ]

本帖子中包含更多资源

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

×

评分

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 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
5 a3 H7 R9 l; K2 v3 ~" l. U) p
以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1908 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2550 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 : `: m7 ]& [+ ^  \7 S* P

2 f: r0 y' e; `( w  S! Y. W: g3 ?4 V  e太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
. ^6 U  K  V# O# X
" m; Q# q6 S8 ]  b3 @0 X其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 ' @. g& G/ z  Q+ X  ?, l$ S8 \1 l
  b+ e6 M+ P8 d+ K1 J
CheatEngine搜到的临时地址当然无法对应MAME的内存地址& I% F3 B$ j. t7 Z' F$ g2 O8 ^

" a4 S, f0 ]) i" k- M新版MAME没搜索引擎了么?" {, v- O: e9 Y& D$ k) W/ [
晚上我看看
* Q! a% f' A5 I9 U
4 O' v6 S8 c9 }: D: N( `MAME查看地址的功能还是有的2 a$ J" Z* V' V3 n' _
菜单里的第一个选项就是显示内存地址
. Q, L  Z' D/ W7 R. R不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1908 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:: Q; f& n6 @: H0 h% r
1.DEBUG版MAME有作弊码查找命令
2 j4 N! V7 ?& ~9 `6 ?7 [( Z  q
1 E( ]: o: i2 ~# M* @命令如下:+ _% o$ k3 d: N$ g
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
8 o' @6 f! r; X& X<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
; ^$ F3 i( n( G+ v" Z; N' h<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)+ ]. {& w! r' t/ Q* L3 ]9 C
<swap>是决定字节是否交换
1 y$ I; b* h+ ^) z<address>是地址,地址必须用十六进制表示,例:0x100248
+ {1 D0 T+ M( I  S* h& b! S<length>是地址长度,长度必须用十六进制表示,例:0xfffff) }$ x& W" \$ C( D' Y+ e6 n4 @
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
" B& M5 H! |) h9 s8 K! T3 |8 d/ b: @
请打help cheatinit命令获得更加详细说明
" U. E+ X* Z  I
  Z8 m3 g6 t. x2 U# P2 [cheatnext <condition>[,<comparisonvalue>]! R$ `/ N! [' ]  D7 P* z5 s/ m
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
' y0 M7 ], D7 J+ k& D[eq]是等于$ M: t4 T2 `- O8 s) d3 y
[ne]是不等于: o% F7 ~; h" n& g9 Y
[de或-]是减少
9 x" z. V$ t. o' L- c[in或+]是增加0 w$ u4 T+ a) W/ ?& u: F5 X
[deeq]是减少或等于
: b  f' A$ K. @% |1 U) O) {[ineq]是增加或等于: D; x, h" q' n
[lt]是小于" q3 |  G8 h1 B# l. `
[gt]是大于
, |) ~% C  J. C( E[ch或~]是数据有变化
8 y: q$ N% K: \3 i2 h7 c& {
9 ^3 k. O% I+ l0 I: b4 w<comparisonvalue>
+ |. `9 K8 ^$ T# ]' L6 D要搜索的数值
. V, f& r- Z+ I2 H, Z2 s/ R( J: @
& h$ G, A3 O. S& Q0 i% `+ a/ c请打help cheatnext命令获得更加详细说明
" u+ z- t7 r* r9 T4 E6 Z; w, X# f3 N9 E( i
cheatnextf <condition>[,<comparisonvalue>]& B, v) h2 [& [) g$ _* P
说明同上' c/ X6 N3 l/ f' q
  \: \0 \, B1 B9 @
请打help cheatnextf命令获得更加详细说明
" J: n! e, B: _( [$ \1 }
) y; \8 U8 g5 }+ W3 r1 Lcheatlist [<filename>]
- O4 f+ J1 s+ t5 v8 M显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
0 o, B1 M  q$ T! _. E! x; m0 r$ G# P8 @& Y* j3 L$ Z* \
请打help cheatlist命令获得更加详细说明
8 m( g. U: w7 H/ U" d8 ?* F  E2 b" A5 J4 W6 A
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化$ D/ ]0 l4 g3 _6 u8 z8 m! N
4 h; G& K: d" X4 J0 r; Y5 Y
之后进行第一次数据搜索时要用cheatnextf命令来摸索- k; E( C% t* Z% M

2 d: w) {: s* S; d0 x, j  j到第二次、第N次数据搜索时要用cheatnext命令来搜索
. H& R0 u5 C, c4 z6 y  R% ~
1 g" G$ w) {9 A1 w$ _举个例子吧:, X" B, S/ p& c  \% S2 Y! g/ m( V

3 E8 ]6 a. C2 f4 V% y7 c5 L以合金弹头X为例:6 W! d' U7 e6 r: }  B7 c
1P生命数是2
5 M5 v+ b6 R* m9 p' j0 h6 i4 A0 Z2 [$ ]! ?. A8 W7 p5 w
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
/ c4 |: R, v* H' M& y' P! ]8 T  t& M) U
" M4 [; t( {, V. B, V, ^; E7 a命令如下:2 G  ]8 P$ g1 u: d' Q
cheatinit ub,0x100000,0xfffff,0
! i5 d: k/ p* G& c1 u& y' o
9 W' s! ?* V4 i" U+ G8 y; A再用cheatnextf eq,2命令搜索生命数27 [0 k! \+ N( \# @/ W% d8 X7 V
( i4 z; R8 n; W) S
cheatlist显示搜索结果! t4 z6 R5 y+ C

$ N7 J. D# C% b2 `7 Y死一命后用cheatnext eq,1搜索生命数14 a6 B5 @+ w* A& ~! m$ k
1 X& h* ^# E9 b1 U6 \7 V. M
cheatlist显示搜索结果
" h5 v% |! F! K# t+ l% U" V; [......./ h# p) C5 A) L5 z1 Q1 Z
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
+ I+ K/ [" j' N3 n$ i& z4 S4 T& E  f- `2 d) G8 I, K5 t2 t
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。4 G0 H  E3 s+ V& s, K
+ \4 e7 a- u% d( \3 q$ T6 p
没作弊码的话....6 i+ A2 m0 L% V4 i% S
& t7 L& |! h$ {( B, G+ L& U4 r
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)1 Y9 C, l" `# n

, o) e. @' C) k% D* \7 a* x或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址), e. J1 p1 Z0 V* N5 h/ O2 `* I
% V: H( j9 ^1 T4 O: S. [
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行) x4 |1 \% `& q' |! y8 V

- l# O. Y$ I7 g要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

, e, `3 b7 I: n; e* I( P7 g  K0 j3 ^7 f$ k+ h3 g
回114:
% z: |) Z& _2 j1 B+ S* ]
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M), l* Z& U, I) I; f: f) T
2.没地址如何查询地址?看上面我给zsyf的回复
2 H4 M$ v& I) T0 {1 d" b1 ~" ~7 W
/ K6 Q3 }4 T& I; c
打字真累.......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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2874 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-10 14:48

Powered by Discuz!

© 2001-2026 Discuz! Team.

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