EMU618社区

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

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

  [复制链接]

签到天数: 2201 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
3 e1 p3 Q$ t2 o1 n! s' J6 x) o$ d. a
(1)如何加载ROM# g- M1 G0 E3 L. N
7 [* C2 p  \' Q" [9 Q% A
先说说如何加载ROM吧
4 K/ c& ?& E+ i9 c* V3 J7 O* x& G; D  A) [9 K3 K! Z
以MAME 0.148 DEBUG版为例:, f: r/ _% h2 T! i/ w- |9 T2 O4 g

; G! ]! Z7 h" [% R4 r* l1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html( j! a7 y) P2 A* o/ C! G6 p
8 c+ y0 D$ w5 x( B6 u& V. ?7 t6 R
注:MAME官网的MAME是命令行程式,没有GUI。5 v+ V9 L* y7 T/ o7 l8 F" x/ B
7 N# A% \' s& g7 O9 v
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
* r$ ~; p/ `* Q2 \" G- J# g  _1 _3 ?8 e1 W
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:% q2 T9 H) C8 t$ O' l

; l! O4 p1 k0 x8 v0 D3 o, vd:回车9 U6 k' Y7 M8 p

, `! i' \) s8 ~' w0 [6 Tcd mame0148b_debug回车& {) X' M4 D) t* S

0 c* W5 J4 ~7 @1 @  c0 S如图1:% o/ M0 h' n/ e
6 j$ A: ^" z% e. ]
% w0 I( s/ b) N/ T4 S
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:8 }6 t2 i, N. @; Q0 F

- T$ e2 M5 D8 a+ I9 @$ K6 F; ~5 e
: k' c+ Q& b/ R: L! I" W" E  j$ b/ v0 D9 @: O1 H4 u5 C" I  B& {
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;5 S# [; C" t+ P
, x  G& w( ^% g1 T; S, Q
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。8 c. l9 m3 \2 l, X1 Z

$ M/ j0 q8 s0 I  s2 \6 ]2 M(2)如何呼出/隐藏调试窗口8 j6 V2 p& ^$ w
5 A9 w9 S7 M/ y- {) L
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:2 G: z, I1 K' C0 g( B% a3 A  X
( I  H3 e' s! n8 J; [. Y$ F

; U# e* k) d0 o  V( R6 J5 V0 ~
! {3 p, z. c" C. _2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:. Q4 k  H6 H6 b) n6 J+ {6 }- b

7 O# j9 ?$ C* _/ p8 z' p2 u  F3 I% ]0 I6 q. c; J! W/ E

# h% @4 ]( _% }6 d* c% A% l, g3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
- w# P) p& }! }: z4 b; }4 G7 G
* C+ W6 n( g. C) u(3)如何下读/写内存监视点以及程式地址断点
9 F. M( `& ]. M7 P
! `8 W- y; o6 O6 ]; q$ ]  z4 ^先说说如何下读/写内存监视点吧
& t  }2 }7 \( l+ m- I1 ~# P7 A% I
监视点命令格式:wp <address>,<length>,<type>,<condition># x: Z$ M2 w& D) {! C  Y9 q7 u: h0 a

6 W* R! C: B- \7 |" S. F<address>是地址
4 e: X& N5 I* I4 B2 D1 T  ]
/ o6 {' _2 p' d- C2 i9 o0 d<length>是数据长度,长度必须用十六进制表示# N$ Z; H8 o& ^. `
9 L& }; `' e2 t; j& q+ @, n; `
<type>是监视点类型,r是读,w是写,rw是读写
: B4 I7 \; n8 Z8 N6 `% G
4 b1 O. F: P3 x8 V: Q' {例子:
+ }9 q& ~  I) q* }5 E% y: `" ]4 @4 R: k2 Y% W  }2 ]
例如对ff8569地址下写监视点,数据长度是1个字节7 F! M' A6 @+ C1 G

, M! X+ Z8 ^$ Gwp ff8569,1,w
2 g5 t8 U) Q2 d7 K4 K) M" N. a6 r5 W' w' C& {+ L9 f% M
例如对ff2235地址下读监视点,数据长度是2个字节& S4 _! ^; T0 P" f

5 k- x1 x4 r" a5 j& y" z' jwp ff2235,2,r
, r2 t, n! Q5 R8 e( Q8 T7 C, X
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
6 F( M, ]! c/ M8 F' [7 u$ o1 F$ |9 s  f, P  ]# Q
wp ff7533,1,w,wpdata == 05 Z. L! n$ z) v) W8 I- y% l) b

# O) Z4 Y( z! N以龙王战士日版为例:
1 N3 E& D& m: r
! a3 @- z8 _" ^/ F1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
. S( S# l& F) Q" B' K. I7 X
3 x" D' d5 p' ?0 C% O! U
! B$ `( a" f, d, P+ h3 T" K# W8 k3 J0 L

6 F$ U4 W$ A" C. W* m- V2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
. ]5 P) I$ I: j7 M# o9 N9 \6 G% V) P0 L' ]. B; L, ?  j
0 W9 {# `, p8 N2 d/ E! T
8 \6 N5 }) m! m' A4 p- w
接下来说说程式地址断点
3 q) u3 e/ g( x' b  t% ]$ ]2 D: G0 n% n( Y
命令格式:bp <address>: M" ~: s  K: t% O
; X" w" X3 ^0 f8 f4 s4 ]
例如对000488汇编指令地址下断点' T  w3 _5 I: ]$ {% K- a
$ Q" v" [2 y* w8 x) b/ n4 B
bp 000488  R& Y( l7 ]4 L
/ C5 B, e0 w& `1 L/ o% E) |
当程式执行到000488地址时就自动中断9 \/ ]' I( v9 q) e2 V

. N& D2 y; X8 e4 H# O# o0 b' _更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
: I! Y, x( }3 z
4 l- z, ^9 d4 Y5 b  i; R. f有错误请指正。
/ Q4 i* H. G: k9 U
) Y# Z2 E' {/ @) |2 ~: g+ x6 @补充一些命令:, r: ~; G  `2 n% W6 W0 \, s- R/ s

7 v! t% n- @8 z1 |' Z9 l+ A4 ?"wpclear" 清除所有监视点5 }2 v: y( ^0 I- D$ s
"wpenabld 数字" 开启监视点2 g4 m- `- E9 y. p
"wpdisabld 数字" 关闭监视点$ m1 G1 K9 p8 E' U& f7 E8 k
"wplist" 显示所有监视点
( l4 ]' I/ x$ w2 q8 y1 D- O% o2 Z4 _0 t! k$ V
"bpclear" 清除所有断点5 x  M2 Y: K2 e* I
"bpenabld 数字" 开启断点7 j( h3 M. \) J" @- N- q) p$ p
"bpdisabld 数字" 关闭断点7 `# f5 {+ {$ K  o2 n8 O
"bplist" 显示所有断点2 F) e9 y9 U/ v3 Y

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3647 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽0 F" W% D# W1 ?2 G  s; Z9 O

- P, K, `6 Q2 e8 Y( a- r以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2201 天

[LV.Master]伴坛终老

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑   J% S& i+ v6 v# o# x
1 Q* w7 w! ?* d
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
9 Z1 d4 y9 K" O4 M1 A5 N& D. @7 O- F7 ^# y
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 4 ~0 I- i% W# B6 s- C

* r' E: K# n0 [$ b5 O+ uCheatEngine搜到的临时地址当然无法对应MAME的内存地址
/ A6 Z0 D1 [4 ~
. ~5 ?# D/ n$ y/ f  I新版MAME没搜索引擎了么?8 q, m& X- [/ I1 T" @
晚上我看看2 x" _9 {. D0 x! ^) {2 v% k

1 b: K5 \( _" [; }+ A  t+ hMAME查看地址的功能还是有的
! h; e; p2 I+ Y) x7 j菜单里的第一个选项就是显示内存地址' _4 S; @* o/ u
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2201 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
$ b  C6 s2 v$ w, e# u
1.DEBUG版MAME有作弊码查找命令
. p! e- n  z, r2 ?$ f0 K7 P
& o7 d$ h) Y2 J  p7 T+ |命令如下:/ ~! }5 O% D* E9 T! r$ c
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]3 c7 d6 m- E( b6 J3 V
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型# M% v" Z/ D% P5 e3 d- |" r
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
7 |! u+ P/ W* F$ S7 G2 k<swap>是决定字节是否交换
* r; y0 k% ^, X# y1 x8 U+ A5 ?$ g: s<address>是地址,地址必须用十六进制表示,例:0x1002480 _- Q4 @' a; _. g2 d. X. }
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
6 N; |/ l& M2 x5 Z* l9 }5 c<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU# [2 C( v& B/ i) k2 q

" g; T0 @: N0 O3 h3 |请打help cheatinit命令获得更加详细说明9 n: F+ U+ Y1 h4 l
+ Y- x: _6 V+ P
cheatnext <condition>[,<comparisonvalue>]
' L& d5 D9 u1 P5 s% @<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]+ e- O: C' @4 M
[eq]是等于/ b7 V8 e; D$ C, G! ^
[ne]是不等于
/ ]) y4 r8 c. x# X1 u: ][de或-]是减少& }2 A7 Z1 L' ?: R
[in或+]是增加; L/ Y7 b# Z# u6 h
[deeq]是减少或等于& D5 w9 V9 L/ _. h4 g
[ineq]是增加或等于
9 o4 A$ ~5 Y0 Q  A* X, H[lt]是小于
4 {6 U# r9 P# N  l: D[gt]是大于
! q5 B- Q& ?7 ~) Q$ P[ch或~]是数据有变化* c, V, T) P4 L( |- W+ g3 q0 ^- y
( o& Z2 z% B$ E0 Z0 M) F5 r
<comparisonvalue>
- Y2 p; `4 E% M6 |6 F4 M& \4 t要搜索的数值7 Z* Y7 F5 M7 J5 V8 J! b) m
8 c% L% ]9 X  j' P; R7 @1 @5 l
请打help cheatnext命令获得更加详细说明+ s- S4 J' |/ n

) c; i' H  A: n7 Y8 Xcheatnextf <condition>[,<comparisonvalue>]# f/ E0 j6 G6 }6 C0 X
说明同上
  R( q/ d: L* E% c# j' C
# i5 z# h  W4 o# {: D& S# L请打help cheatnextf命令获得更加详细说明
* @8 b+ F5 [3 W2 ^4 A
% u# T; V4 }# [3 u2 Qcheatlist [<filename>]
7 A! J/ o6 r. {* i0 H* b& u显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
5 n: ?" |8 N& q5 F! d/ S$ F/ A, E" A. ~
请打help cheatlist命令获得更加详细说明
7 \6 y: }* [! V4 j8 G7 n  t; a
- |, t2 U$ v9 ~% ~第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
6 c7 E, Y/ G  L9 s# W
7 x1 T; {! Y1 U之后进行第一次数据搜索时要用cheatnextf命令来摸索8 P0 q8 ^( C# I# D4 Y
9 a# r( Y; m, {7 p  k0 Z( v
到第二次、第N次数据搜索时要用cheatnext命令来搜索3 \. A! n) g" `
1 ^, Q1 H; v2 Y
举个例子吧:
$ v3 c6 L' s) Z( @/ o$ G6 [7 p4 y2 N: M
以合金弹头X为例:
3 d$ D: q0 s5 I; i! B- A( n1P生命数是2
# o, e% k& f# y
* r7 W$ y( [" a# N/ f' L先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
4 W7 f' Z- I1 N. `
. M! X* i" E$ A, u2 r命令如下:
* i+ P8 V9 U: K7 @1 I% ~cheatinit ub,0x100000,0xfffff,0
9 U# ?2 I" {0 g3 ~7 ?1 k' Z; E7 l3 [: Q; Z7 \; f9 }1 q
再用cheatnextf eq,2命令搜索生命数2
& O  ~2 ?8 B& m5 l% X, ^5 D( e' K
cheatlist显示搜索结果# w# v/ U/ N, @1 {: D( Q

6 z% `0 H# Z2 p3 a死一命后用cheatnext eq,1搜索生命数1
2 Y/ u' B( a. c9 S
8 T( {& ^# \8 E' I! l/ Jcheatlist显示搜索结果
, R3 e( V& w7 r. I. o.......
( q! l; I7 j4 l: F, ~  h* `. s直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果+ J/ ]/ H0 a. D4 `

# K* U& V; A! P1 T5 D7 h% i# i, m还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
, ?9 S, {/ J& i. ^* {$ T4 e& z5 |* h' `$ E% O) n3 e, j" E6 p
没作弊码的话....2 V3 K" e% c  d9 O, I

" i+ m0 N) @- K( g5 z0 X不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)" A4 V8 d; s5 g+ i

3 |4 l) _- t0 e: Z! D1 ~1 l! a或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
# B5 n7 ~4 c5 E3 N+ d$ c2 l1 j7 ^; R- l4 J2 O! J7 B; Y6 z5 v
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行9 c  y0 Q& s  I! k7 Y  t+ g9 @
. K3 O% L5 C) f8 D. z
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

) s- {$ R( w3 D' _  i- R/ ], X4 o/ j1 ?; j& K( `
回114:- k, A) y- E4 H* t
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)9 L$ }( y, ^* ]' a
2.没地址如何查询地址?看上面我给zsyf的回复

+ H- R3 @2 l; X# d3 {
  g  v1 \0 [0 h  U/ T$ l, ]. D打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3165 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-25 12:32 , Processed in 1.152344 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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