EMU618社区

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

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

  [复制链接]

签到天数: 1996 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
  p& M: s& D+ Y6 t7 X% h0 j( v# K9 `/ ~/ q) r
(1)如何加载ROM
. d" S2 C+ Q( p  U8 S
" N- L* I7 ~$ T" O" q# r先说说如何加载ROM吧
. B9 W6 \' b/ R# S; `3 o8 z$ T% g7 E. D, `- _! ]5 K
以MAME 0.148 DEBUG版为例:* ]9 a. i' o  }1 X; c4 I- X0 z
8 `# x, E! D  M* \5 k/ e: X' [8 `' @
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
; ?1 R9 k0 c7 S, x* F7 l6 R, u
( g2 \. a2 M; N. }注:MAME官网的MAME是命令行程式,没有GUI。
! P4 d$ c7 ]  q5 }
' _) L3 r# n' w" b" a, R. x+ n' A6 u2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;1 }1 @. x" q% _. i( h* a
; w' U7 a8 H1 f0 i+ l# S
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:1 q* c6 m. f" U+ E! }

# K' c. u+ [8 j4 S% H( x: X2 zd:回车8 L8 F" s$ x% K2 ^. `
8 g) T# {* _( P5 }" B" b
cd mame0148b_debug回车
9 k$ i- s( P2 J7 [3 F4 z
' Q8 K  j* \0 o3 g5 a# q! z如图1:
: q9 l- b5 Z$ G6 G7 W  v! _$ [; S/ W% s1 J& ^4 O1 C5 w7 n# f
3 [3 I% I" P' X4 C* [$ o
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
7 o; R7 h" n( m) }) W: ~2 K0 h! H' a$ F& H

% |# \2 O% o. @5 ]0 i
6 R* _9 j8 z  G; K7 B' r" I& K5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;# P' f' k! b- _" E; y9 w- V

( s+ x' v% m8 o7 ^+ k$ Q, \, b! t6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。1 s0 O) d" b% E) O6 t, g3 ]/ E

  w1 f0 ~- C& S8 V/ V' J8 b  R% n(2)如何呼出/隐藏调试窗口* k1 Q" D# C& C8 p  X- n
+ D# J$ E) y( F9 J2 V/ |1 F
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:3 \0 y) e2 H4 u8 J4 P' b1 ]; d
3 f# k$ \9 E  r+ T, Q
) O4 j" I4 T0 u, c& O1 O- S+ J
. k  }3 W) y% I3 k. v( }
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
- Q. q- d. v& v  k/ x7 V$ [  R, J- h
# \: V  e* B# E
9 F2 H+ _1 I4 z  ?  \" ^7 t
" C. i2 n  V, l! C; o( r" g3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
! Y4 i  \% S5 m( G
: U7 Q0 N! r  t: s3 E% |' M+ [1 x(3)如何下读/写内存监视点以及程式地址断点
$ `' A; c# F9 ?$ e/ Z7 |# D
9 A! c( K+ K. x) i; ^先说说如何下读/写内存监视点吧" C2 h( a1 W& b  w
' C# M2 l* ?  M
监视点命令格式:wp <address>,<length>,<type>,<condition>/ `$ x& e1 V4 A/ {* d) ~7 [0 _
2 o& c6 p6 L. {7 X  Y0 U( Q7 n
<address>是地址4 e' B% p3 t  [- L

9 d, x; e/ l% z5 `! A7 h<length>是数据长度,长度必须用十六进制表示
' _! g% S1 Z) ~8 ~
3 ^+ Y* S. X" }0 H2 ?<type>是监视点类型,r是读,w是写,rw是读写/ Z+ o1 @* l0 Z! N, b; G

7 w5 p; j+ l+ @, d$ r$ E! n. w例子:
/ p% u$ }- E! q1 _
8 ]& y! w/ X+ h" g例如对ff8569地址下写监视点,数据长度是1个字节
; k1 j( |$ `0 C4 s; a9 J" x; w+ ?- V; P6 n' y: L) N
wp ff8569,1,w
+ R! f% p* I) p8 v! o8 a# l9 ^" l- q/ }! v- a4 H
例如对ff2235地址下读监视点,数据长度是2个字节
+ q$ P+ j  E) U7 O" ~" |& i- O' v$ w# X- ]0 _- ?: L0 `- r
wp ff2235,2,r- w4 d$ W8 ]3 ~) D, l+ a

  a9 b% s8 m+ q! c3 |: u$ Q* ~. @! N例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
) i, r1 Y( V$ g3 n$ ~" `) I4 Z) h2 Y+ m3 ^, D
wp ff7533,1,w,wpdata == 06 n- f! E& n( f
$ S2 G8 f9 p' @% K; [
以龙王战士日版为例:6 B! o+ t; F7 y, v5 \
, h6 ^2 R* N& V1 V: y. ?
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:+ L$ v) X- Z9 p( d2 K7 E/ l
9 `' P3 w& c6 F+ ^' }
1 i/ F5 z6 M- S4 B. p  X- _
, Q+ z" T( q5 \! u

/ U/ |# J) `7 e' r( }: @2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:  f, J7 ]" N7 D$ g! Z( m0 v, `/ L; j
/ L) r0 C' p% y8 w' c, t
6 p% J( x  x+ u- F: W$ \
: R4 W1 d" B' f6 I0 j# T' H8 A& V
接下来说说程式地址断点. M* ~, H* J5 I- M

+ i  g. b" }3 M% l8 T命令格式:bp <address>/ ~; i9 ~# }( R; l

. h& n( T. g! E( @, P* g例如对000488汇编指令地址下断点: M8 \- r' S1 f; P. d
) _: j8 {& h% a: t+ Q, ?
bp 000488% ?" _' P; D: C" b! B- y7 n$ X

+ t* S5 M3 |1 p  b1 V0 |当程式执行到000488地址时就自动中断
# \( d4 [# U( T7 T" B0 b0 i# I4 B2 |5 N+ f2 F) O2 V0 P
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
: b9 F6 |$ Q3 f$ g7 M' v( o& Y! H0 ]; b1 u' c0 E
有错误请指正。: K& o& v" V, Z$ `, ^2 A' c: E; V

8 D" s! V6 e% x补充一些命令:
, k& F/ D+ _" u: T/ e0 G. O. |. S
' ~9 |! x6 q$ P"wpclear" 清除所有监视点
. q- ]* `! `0 |8 u( ?7 M* a"wpenabld 数字" 开启监视点
, X% Z$ _' K8 R' n3 x"wpdisabld 数字" 关闭监视点1 U; j0 k. B2 X+ u
"wplist" 显示所有监视点" u  F) V. N# C6 c8 m* P

0 O: N! }2 z! [% {8 V  k* m"bpclear" 清除所有断点
5 j) m, E: Y: s( g"bpenabld 数字" 开启断点. g' X# S1 m( `6 o* I# o; ?0 v
"bpdisabld 数字" 关闭断点1 I$ v4 w. u+ a8 u9 y
"bplist" 显示所有断点
+ J0 R6 \* ~: \4 ]) U. L

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3440 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽5 {# E+ v+ Q! z' b" I* V

/ S. k6 A! G. `* m: }5 B以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1996 天

[LV.Master]伴坛终老

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

签到天数: 2561 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
% V& {6 \! ^5 B! Q( q
3 P/ o! S& n5 M* p( q# W太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。7 t; P5 y3 g3 k, H  z* ^
" x% [1 B7 h5 y0 c, x$ T+ n* H
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 / K, h- @3 M: X! |  J9 U3 I1 `- J5 h
# m$ C( B! W1 s4 t0 Q
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
$ W; }+ {! B* |! ]' N4 A7 ^/ ]' I8 p$ S
新版MAME没搜索引擎了么?5 I! }1 U( k8 ?* \
晚上我看看
! E$ H  n2 g6 y2 ~  ?+ ^. W9 Z0 Z4 p6 h5 Q# x6 u7 S
MAME查看地址的功能还是有的" t4 {8 z% O, I
菜单里的第一个选项就是显示内存地址
* P7 h, T5 j, {0 |) O' {% ?不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1996 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
& E. x2 J0 F# l4 w
1.DEBUG版MAME有作弊码查找命令
/ @  H+ o: q# S. v4 I) a2 C$ T# R+ @5 l. O
命令如下:
! o$ e3 y% C" m+ i. x- w/ ocheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]1 O8 K4 T9 Y  U  b) n2 Z5 Q& U
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
" p! u* e  Z) E# D- k' W<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
: f9 C3 D* C4 v9 }; Y" s' L: y<swap>是决定字节是否交换
/ M4 ?$ M$ m# x# y. _6 q<address>是地址,地址必须用十六进制表示,例:0x100248
; O. G- |1 o# s2 D9 r/ W! N<length>是地址长度,长度必须用十六进制表示,例:0xfffff5 R  C: Y7 a- K6 ~
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
4 r, q# o& _9 a& ?' v% w. @# f% Q6 k: |& f
请打help cheatinit命令获得更加详细说明
2 t' [9 N% d5 L: A$ g1 z1 |3 V/ o
3 [% F& W4 `8 R1 n3 Y9 Qcheatnext <condition>[,<comparisonvalue>]
0 G; B  a- N( n4 u<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
+ l) _& W' [' F  n[eq]是等于. i  P& K7 J4 X* i4 P4 U
[ne]是不等于8 i4 j" r' b1 }7 i
[de或-]是减少6 l- V* C! d' \3 U- G
[in或+]是增加
6 K) {. Y. Y" ]* l5 @9 A: b[deeq]是减少或等于
( S. h: f# f6 Z- S' k[ineq]是增加或等于
  ?! s# H6 O  a. x" i, i[lt]是小于
+ {' [, c7 u6 i[gt]是大于
# _: f! D  l7 S8 ?+ W3 l[ch或~]是数据有变化
% K7 I. i- F- d+ P) H1 ~- L* l/ U  s, O
<comparisonvalue>
) b, G$ f$ n/ ^! T0 N( G( P要搜索的数值
# T4 P0 Q6 W8 C2 O) D  f9 Q- W- D5 B% r& L; U- Y$ s) J
请打help cheatnext命令获得更加详细说明! |) \0 r, L" a* L. ?( Q

$ k' P4 d% q% X% [cheatnextf <condition>[,<comparisonvalue>]8 Q, w7 z2 |( m6 ]6 X3 D
说明同上, C1 K3 J' l6 j
* o' u% m3 M7 g0 y2 K: R
请打help cheatnextf命令获得更加详细说明
' K9 }% ]' ^, N* ]& }5 T8 ~$ a) Q. z: V, G  X9 ^: r5 V
cheatlist [<filename>]
+ p, x& L7 F0 ]2 {- |显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
5 E. I4 i6 ]. f4 C! v2 Z4 ~; I, D$ a* B% x1 v. u
请打help cheatlist命令获得更加详细说明4 e0 t- f& }7 \% S

3 v. a) u$ y$ m  s第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化; b# l/ q6 @  K/ E3 W! o

; P. n% Q( F# A% f之后进行第一次数据搜索时要用cheatnextf命令来摸索
6 Q3 s" L6 v$ D: k; H( c; P
( j3 p- n! n- g7 f2 S到第二次、第N次数据搜索时要用cheatnext命令来搜索) e' V+ v( U4 |, U2 E

( r# X# A$ ?5 ?, h% Z/ i举个例子吧:
: N. z) a$ b# C$ O9 {( h" [7 \# S' I% l2 x
以合金弹头X为例:
/ x* t/ t( z' j, N( G9 W3 ~1P生命数是2/ G2 s2 {( |* J; T

( z( b2 N9 P. Q* Z. l" g& l先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间7 ]; _, U* ?6 j7 q. Y
" _& r" U  C+ l
命令如下:
$ ~. E, j% P% f6 S9 V6 Ycheatinit ub,0x100000,0xfffff,0$ M( M! X& m( J1 h

" R3 x$ H/ |$ n6 j7 R! v  ?再用cheatnextf eq,2命令搜索生命数2
0 _! f7 R6 Q' k8 y' [7 y/ e8 J$ E/ i
* D' ^, F0 x# K" F& h! r" hcheatlist显示搜索结果
: l; M/ r; m) g2 B, _. ~) \4 O1 W2 [2 I! m8 @1 I
死一命后用cheatnext eq,1搜索生命数1: V/ q# {" y1 S9 T' \; ]- ]

9 y$ E) l, \6 r! m" k7 R+ C2 @. Q+ gcheatlist显示搜索结果! ~% ~3 A- W, Y: Y) U: u  t
.......
( b9 n) d4 I8 a2 v( |4 T7 q直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果  ^( ?1 w& S0 Y; I

5 ~9 ^0 A% H  L6 ]/ T4 P还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
& j  H8 u5 ^7 D$ {1 ~/ Q/ C; T6 d
+ p. l6 Y; D$ m$ n8 a% [没作弊码的话....* N2 ~1 y! A: |1 J# ~
2 V5 h5 N, K7 g- U0 |; A7 t  v; ^
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)1 M* ?; G) D* }& t; n
) K, n3 u* W$ I" e) \
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
5 V- a+ P# {$ H
# l7 U$ @% ^. ?0 H/ X/ C! x+ V2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
0 j8 h1 @) t$ V( z! V
( a3 u, A! z* }# [' V要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

7 J& G. i  k; M
: d. G9 H/ ?( a4 @. v$ U$ h! c, m& L回114:
) h* v# d9 e! ~, g
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
6 z6 T  `2 {% i6 @6 G7 m- o" ^2.没地址如何查询地址?看上面我给zsyf的回复

5 ^% z9 h3 H& N1 S* h- H! t7 c/ n" a0 i4 L: ^; 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. 幸运榜 / 衰神榜

签到天数: 2969 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-7-2 19:42 , Processed in 1.113281 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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