EMU618社区

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

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

  [复制链接]

签到天数: 2164 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。0 z6 K' F5 W: @; l, L; u7 r
9 ]( x- \/ r/ F, \, y4 O
(1)如何加载ROM& @: z+ n/ D) q: [, n
2 z& x- J5 I5 S3 r6 F/ L3 R6 i
先说说如何加载ROM吧
* }' r1 k9 r, e: e3 s7 D7 p7 O
9 B' D& k6 J$ S$ w以MAME 0.148 DEBUG版为例:" [# I  z$ w! m
! w1 @/ t- q( r
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html, _( [3 X2 s& P! _2 C3 v

7 ]8 |' c) B" ^. ?9 u, M0 a7 h注:MAME官网的MAME是命令行程式,没有GUI。' `+ {+ C5 Q% W7 H" Z8 M

+ L" p& l9 c9 `! Y2 c4 h1 e2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;" U# o7 _" l4 T/ `2 _( e, C

! m7 [) ^+ G& O3 ^" ?0 v' c$ _$ s0 `3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
' V9 j4 v! {( e$ ]' I6 g$ O. X8 s# [- t# x) \6 S8 ?4 _( O& I
d:回车
# s$ z% _7 |/ h6 N
- Z: o% v* k* W0 y$ p% `3 ycd mame0148b_debug回车
7 K" F! _1 E% l# {' R- W% [: p" x$ j
如图1:! n0 b4 R/ D% w0 o5 I7 E7 M
7 t0 \+ o8 L2 d4 q- ^/ G9 I: Z
( k; k2 e" K, H! Q. X, T0 t
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
, F* L7 |& }5 ?9 {& ]% F* q! `: O& A! ~  g5 S6 G3 J

( s4 S; Z6 j# e- P6 g  x$ w0 `
( S- }8 ^  ~6 ]) q' I" ]6 \8 a5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;+ S, ?$ k0 Y+ ~2 q3 f7 ?" n5 V3 X; m

& L7 e, ?; O: O/ b) e. s6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。* V8 \1 T3 {1 P4 a% L
" U0 d! ]6 b4 D$ y
(2)如何呼出/隐藏调试窗口
+ T4 F& E7 d& ]4 s& t; {7 d
# B1 s% e5 k* u1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:8 `  f' N+ |; c3 v2 q+ ]
, _6 G9 W* _- I$ e1 a% r
' k; B( g6 U/ |; v7 A: B) ^

0 B$ z$ h. U' W6 ^2 k* e2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
! `+ `9 u6 V: g! ?; V; }5 h" k& b5 }4 S* Z* F% T' o
+ ]. z: R* y4 Z8 q2 x9 T

' Z+ ?1 @. y2 A8 m8 P6 z3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。8 f% \/ ~4 J8 g  H
& p: E7 Q$ c! [+ v
(3)如何下读/写内存监视点以及程式地址断点
1 E' S. T* }+ l* H0 l& g. D. X! r0 C$ W# ]7 }% O
先说说如何下读/写内存监视点吧, p1 k, K* m4 C6 G9 Z8 T, _

) [0 z- }# l$ k  N4 h监视点命令格式:wp <address>,<length>,<type>,<condition>
2 [, t4 v8 k/ p& G! f# U4 W# F4 F
; c8 H& h$ H( s3 _' N' q<address>是地址9 _( Y; d5 F1 \( I
) P5 m. E: p1 P* q
<length>是数据长度,长度必须用十六进制表示! h8 e4 D  D# B# i
' I5 t; K& a. J7 S' _* Y1 }
<type>是监视点类型,r是读,w是写,rw是读写1 H& f$ T6 M5 s; U

0 R/ ~; H0 J0 ]2 i& o例子:
: v  t3 q  n  E% T
) T4 f. e: i0 k# c- n例如对ff8569地址下写监视点,数据长度是1个字节
/ y# }  u" ~( N6 e- p/ m
) X$ I: e# F4 H3 ]wp ff8569,1,w7 Q+ i  h( r! M
$ d0 F: a' s4 ?( r& `0 w
例如对ff2235地址下读监视点,数据长度是2个字节% R1 k% S8 A+ W+ B
, W* u# q  h1 ?+ E; }
wp ff2235,2,r
% X- {0 {1 _& m8 B
/ L3 D. i+ @7 u6 F; |0 m9 W例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
* T5 q( G4 I3 q8 D  p- ^' G/ V1 I" s
wp ff7533,1,w,wpdata == 0
. d$ }& [: c3 X  M
. |/ v, g# d$ u! `以龙王战士日版为例:" K  [( x  L4 Y; X/ ]3 {
% d. t7 {  K! ?6 ?
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:! g  \( p: b% @1 m
: i- B6 u+ a. P4 N6 e

: x$ \; R% [* K2 \
2 l( K1 e4 j* Z; X
" _" I4 V$ }+ J$ ]! K2 O$ Q2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:1 R8 i$ y  e* S3 L8 i7 L; z
. r) g- \, {2 e$ U; p

) Y3 @5 Z& b+ }9 X, M7 U# V5 Y* x, [
接下来说说程式地址断点
, c. U: {  n* P
! x" M3 b7 g5 l9 P! B, \. Z* M命令格式:bp <address>6 b: _) s2 ]5 q, {* e# f; T' E( K+ N

2 p! L& z  V6 I例如对000488汇编指令地址下断点
* X+ L3 r1 ^) G% s) }- ?& G. }
, M2 x% w7 G* ~- `1 N1 M: i  K- _bp 000488/ @2 t2 u6 G7 Q9 B/ Q8 W
7 \; ?: a7 t. T) P  w
当程式执行到000488地址时就自动中断
0 M" Q! R) H, |! M5 D3 a5 M7 Q9 i5 H( L
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看, c- F* w/ _/ Y) ^% Z0 t! }3 S
$ Q6 D9 @9 w1 @: x& w7 Y
有错误请指正。
/ a0 R* I- ]+ ^( R1 t8 T- J6 Z) T# t0 c6 f2 m, T+ ^9 k
补充一些命令:
% }  r* u  w9 W( Y5 u8 r7 ~. R0 r1 _( N& J# |
"wpclear" 清除所有监视点
  o4 C$ `# y( C, }"wpenabld 数字" 开启监视点- Y0 @8 }$ U$ F1 G2 S+ S7 L  f5 @
"wpdisabld 数字" 关闭监视点3 |. c3 o0 Z8 I& X4 C
"wplist" 显示所有监视点
# @. a9 {' y5 F: l: B: W; a9 a7 i* G, n$ h. U
"bpclear" 清除所有断点
5 n3 f! U! l7 V, u5 k; H6 P"bpenabld 数字" 开启断点
% g0 E1 l: C% r9 \/ E4 `"bpdisabld 数字" 关闭断点
) _# V3 r. X7 h% v3 T# S7 e"bplist" 显示所有断点
) N( L* M6 ?8 w; m* C

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3608 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
( l; Z  V3 L( I( k; p& K* R# ~/ A) U8 ~  K, \, k! _2 f) y! |4 M+ K
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2164 天

[LV.Master]伴坛终老

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

签到天数: 2585 天

[LV.Master]伴坛终老

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

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
; Y8 \, o1 d+ A: I4 E9 u1 A5 z: r% L, F6 t
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
# u2 c5 ]5 y4 {- |- [
( j* ]8 q7 N' e' @新版MAME没搜索引擎了么?
; y/ m1 S1 ~7 f7 t, n. l: ]晚上我看看% o: {. U6 W& a
* U: `8 m3 q+ Q8 S/ \
MAME查看地址的功能还是有的
! W: [( V- S" X( w( j菜单里的第一个选项就是显示内存地址& o  ?6 _* J2 H, N1 z' d
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2164 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
3 ?' E$ T/ D& G# s7 [8 p! D/ B
1.DEBUG版MAME有作弊码查找命令
9 a8 v8 t" D! t8 ~# X6 S$ z& c! w
命令如下:. v% j( N) E! D. S# z* V
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
* b; g+ v, \5 k6 o! b4 w+ O<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型( a  i; V) I+ z( D& F
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
% }4 G  J/ N; ^6 P9 T<swap>是决定字节是否交换4 K# C7 a2 S/ X$ G: u0 j
<address>是地址,地址必须用十六进制表示,例:0x1002481 s, @0 l3 c$ n9 \
<length>是地址长度,长度必须用十六进制表示,例:0xfffff: s5 L" v/ r7 J3 k6 b9 L2 r
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
- a! T2 O( Z& T; Y! ~6 ~/ M/ n6 p& R8 ^9 g+ V( y
请打help cheatinit命令获得更加详细说明
' `( X& \. g& Z' ?; r& o$ s, r& D3 x" {; q
cheatnext <condition>[,<comparisonvalue>]
; s1 ^4 R. z* D7 i<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]4 f' h% s9 C' H" r0 O( u1 d
[eq]是等于+ C; |; O' a+ [
[ne]是不等于
% {4 e) I" S) j[de或-]是减少
0 g9 s/ p+ U/ Y8 w[in或+]是增加
! t6 ?7 l& @8 O8 W# I) f& u3 d+ i[deeq]是减少或等于
8 h$ n: D6 B( B" M. m/ n( d" q, h[ineq]是增加或等于
1 S$ R  G7 A5 @( V" ~[lt]是小于
6 m! ?2 @8 r6 h8 q5 w, \: a[gt]是大于) t- O6 v+ J( \2 M9 N) y
[ch或~]是数据有变化
- W( X1 Q( v2 i3 c7 {; j" f' v
* H* E0 N- Y1 u5 Y6 A: c<comparisonvalue>$ t) L( J$ v' |; u5 f
要搜索的数值4 u; g. l' R- w- N  j1 c" v" m4 L& n
' q( p* N4 @7 ?7 A7 B
请打help cheatnext命令获得更加详细说明7 R$ W$ ~& U) H3 |2 e% v& s

2 z$ ^& |+ g2 J0 x( q3 L- qcheatnextf <condition>[,<comparisonvalue>]- `4 C, A# x& L# m( i. }
说明同上' T; z, f: a3 z9 N4 ^

; M( P5 n/ F/ F0 E2 M8 N3 [" o请打help cheatnextf命令获得更加详细说明" a: U8 `/ T$ G/ ^8 {' F/ x
) h8 o' h2 g1 w/ b& D  c. ]1 ~; L
cheatlist [<filename>]
; c* V- I. x1 j0 G/ }# J显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
  `7 \. O+ s8 F/ P# A
( j4 v6 e$ u6 C! W6 J请打help cheatlist命令获得更加详细说明
- x# ^0 E! V- E7 t! e( n: q3 v0 H# c( t8 `( Y" m
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化. Z$ \) }( m0 v0 B$ e. E
! v1 W. ^8 Z( N7 t( j
之后进行第一次数据搜索时要用cheatnextf命令来摸索
( I7 k9 V# M; `) o1 U* t/ V' ^6 ^7 P! J: c* X0 c- S
到第二次、第N次数据搜索时要用cheatnext命令来搜索5 T0 t; y# b# P* b2 n( o2 A

7 z2 F3 a7 t. P. x举个例子吧:
" m! F" e+ k4 i% z; R  m
% y" }5 C1 n, U/ O5 q# n以合金弹头X为例:
  X- I; w  B2 D8 b6 j, B! B7 \1P生命数是28 |% v" g6 Y) G" N$ Q/ _- x4 {' j" ^

' w9 l. Y, }- }4 V: S先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
7 X  O) b& x2 z
  w: E. m- t" r( [7 L( z) h2 w命令如下:* b$ k  d$ u; r0 r# S/ {
cheatinit ub,0x100000,0xfffff,0
0 z7 M( W# x. ~" e+ f9 T+ n# t: o/ E3 a: O; Y" q
再用cheatnextf eq,2命令搜索生命数2
4 v% D2 u0 e' F( i8 ^7 f# E. w/ W8 N
) M# i! i5 n) M3 G/ ]* P1 E% w0 m! lcheatlist显示搜索结果
" E1 `6 Y& [( I) H3 T$ I3 J8 o
9 U& d6 i1 |& \, o死一命后用cheatnext eq,1搜索生命数1
. h* R9 g' s& l  e  G$ ?* c: z, W9 o/ O6 i  F0 V
cheatlist显示搜索结果( @3 h* E2 [0 j
.......
6 Y) s& `$ g+ ^6 G" \直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果; s( M- [4 L" ~; V2 D

* L$ Q; _' h/ F6 H9 W& U4 b& `还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。3 S. s/ q) q+ [3 A& n. b
+ F7 f# j. @8 B7 J; n( z' W: i
没作弊码的话....
3 W* d5 D  T& y5 @5 Z4 M5 [( u9 O' g2 S& C+ w) S8 Z5 o
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
& ]# J7 A( ?) R/ ?& y2 {  C+ F) l
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
1 T  J3 Z( ?8 e: g2 W, n- @+ Q; ~% I& j6 ?1 v" Y  Q$ E5 k' S
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行! Y5 g& O8 Y4 q' E: I# U
/ ^1 v' K5 ^) Z1 M- I- x1 L! N. Z, [6 K
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

7 R0 ~* y5 b/ \9 v$ x' \
: Z; r& B, w3 J0 j* [回114:+ P1 T3 m: t4 z0 b3 k8 Q1 |. s
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
+ b* V9 B$ X7 x' u2.没地址如何查询地址?看上面我给zsyf的回复

. ]7 B! C' c+ A/ m
1 D- A  e9 D) Y- ~% J- }+ j  n打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3127 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-18 04:27 , Processed in 1.099609 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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