EMU618社区

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

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

  [复制链接]

签到天数: 1969 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
% T" c7 ]; P! J" L& i7 @
1 m/ U# |# n9 K: N$ S  W3 D(1)如何加载ROM8 F9 X4 l! |  h* }3 y5 z4 {
+ x4 b$ [, o4 f5 ^" S  N4 F
先说说如何加载ROM吧
; D5 X9 m! [* F. p; T7 R: ^" Y# g
2 w. j6 Q. h- Y# Z: x3 t以MAME 0.148 DEBUG版为例:. E; f* d$ B7 g* g; ^5 ^8 M

) D. I5 X+ x0 ~# t' S) d1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html: e5 g( O$ Y# d& w

  R+ _/ Y# g0 S5 L* Q' j+ }注:MAME官网的MAME是命令行程式,没有GUI。. o0 {- k3 N5 ]9 a' }+ r0 j$ o

0 S' ~. J) p# h# _2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
. M; a0 v/ e; p% x+ T# O8 @" o: p% V/ W+ b/ g+ `4 z3 y7 r
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:" q' r$ s7 j4 D0 X7 E9 }
3 w( e, W1 ]# B- B- x
d:回车' H8 o' c4 g( k) D( J# _  w0 b

+ u* b/ i/ t1 J( h! ^2 y$ |( |cd mame0148b_debug回车
9 l. `) y+ r# l5 j7 A5 e$ r" s; K3 z7 h" _, M8 a3 A
如图1:
' {7 e4 b) _  |' s) i9 N* c; I# x, z' j% z' a# V( r

1 H8 [* |$ W4 _6 v4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
' g( @; P7 J: h5 F- |3 ?1 l% s1 w: N8 L* ~8 S
# R7 y& |2 d$ j" s' |6 h! X
! n* {' Z. _6 A8 s1 q( A, W6 O" }
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;' V5 s- B6 E# F3 W* T

# E  I6 ~7 Q# I: m; R& G9 l  D6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! P# j" ?) ^! `% r5 _& w5 k$ {" F2 O0 y$ s( u7 K9 ^( R
(2)如何呼出/隐藏调试窗口3 G6 t- l, |5 N( v
& Y+ m* {* C& U# P7 e
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:$ n$ R  N2 s" S: Q
0 V) I2 U* B; E! P. C+ V% x
/ H9 Y1 [: v  u2 v
9 c, |% b0 R3 \
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:; U9 H  I9 z* K' d9 q* w* U1 C, p

* ]6 c; a: t$ B2 K# d4 J9 D' ~
) S2 k# F* N  h8 [$ M9 t. O! l5 K1 J8 ?5 c
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。( l6 W% g% n! M
# {5 R' y8 r/ G, E; Y: n0 r+ ]
(3)如何下读/写内存监视点以及程式地址断点
/ `- A: C3 [* L# `% _, K9 U) C% ]6 g+ p& e, n  A
先说说如何下读/写内存监视点吧
' a7 W) [& k; n. P( S
, @2 g6 V1 {) |% {6 r: Y' A  ?/ f* H+ |监视点命令格式:wp <address>,<length>,<type>,<condition>* n7 P) y1 ^  H8 T2 s- B

3 R2 \& ?* W5 a; ~: P1 I% V<address>是地址, J7 B# @! v9 ]- U: N5 z- X
" Y, g9 D4 Z( g7 K8 w% q5 U
<length>是数据长度,长度必须用十六进制表示4 w) a9 Y8 s0 \* z! g
2 R( I! E$ ~: D: B/ G' M8 a2 n
<type>是监视点类型,r是读,w是写,rw是读写
  E. N6 [% R+ @2 S/ s+ Q
" i( d4 V9 P: o0 W/ ?/ X: u$ x例子:* @! S  y2 f- k1 X+ F' G7 ^/ _
- a& ^8 k  [: j, s" A
例如对ff8569地址下写监视点,数据长度是1个字节
. Z& B1 d9 Z5 W. C/ w; k- p& I6 C
" q9 G7 z: K% W; C7 C! T8 bwp ff8569,1,w
3 u  r( m- X% R$ B1 o0 ^
! \, M- z) c9 s4 N- c% B$ A例如对ff2235地址下读监视点,数据长度是2个字节
( Z1 M9 n! p7 j8 W) a2 z- n: H2 x; F  {. @" f' \1 f0 j! M9 ?
wp ff2235,2,r
2 Z) t! J( A6 M6 ?+ u% K5 Y. \5 H# O# p3 K6 W/ c8 x, r. R+ l
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
/ m! g# E: K  ^9 M! v3 G  k% a5 ~
wp ff7533,1,w,wpdata == 0
; B; d- l: c6 v+ t) o  C9 E) M( u. T2 o, K) a3 {& c
以龙王战士日版为例:1 P! O( h! i6 s5 d. q8 B$ J

& H% A( h& h  _1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
$ c# D  z  C5 C, W& d5 A5 D; i% _' l
& b  B& o2 D( I) q
& j! j/ N; R/ k9 [  i. ?. Z

% }+ q' s" c7 E  z+ W( Y1 C2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
& M. z0 x) n8 p! i( M- c7 q
$ a' h1 c; i; t4 R) f! h" |, s3 _, {+ b* v# C  b% H

6 ^; I& z# e4 C* _+ d: K接下来说说程式地址断点
  \0 a* i) ^& f9 N4 g' W7 j% j3 j" Q+ ~9 [
命令格式:bp <address>1 O# s5 j4 n8 Y$ ]7 e
/ H" Y* u& M4 A- ^2 k5 u) P! u
例如对000488汇编指令地址下断点! Y+ l( n1 \" c% v7 L% s$ e* W7 a

' z& a4 Q8 ^2 E' }bp 000488
% b( v* \2 W2 Y* g
3 E. N( N( [5 V' x3 H当程式执行到000488地址时就自动中断
- |! H9 R* V1 z! x, X1 c- T# |  C0 j% _" L" g  k+ j
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看, P/ m4 z5 P; f0 K; d4 }! V# d8 |
( B% d1 T- e* `  d
有错误请指正。
; ^+ @$ K) g$ ~, y5 M% h" S
7 Q: W- @1 y$ Y补充一些命令:
1 A! \6 P. C4 {
) d3 n6 S! I. K& \) d, U: l0 D"wpclear" 清除所有监视点- t$ W2 D- {' t7 T* r0 m) _* r
"wpenabld 数字" 开启监视点
+ e" B3 F; o+ t  ~; N9 i3 J; k"wpdisabld 数字" 关闭监视点/ N4 @* K, ^3 I6 O8 K; d' G/ a
"wplist" 显示所有监视点. y- V- O6 u& @( |0 v* w  I* R7 ~' J

/ v1 `7 z- d! N. C"bpclear" 清除所有断点
: Z- z! B3 A0 Q1 L$ x"bpenabld 数字" 开启断点
& g9 J% z3 \% V) g) g: b"bpdisabld 数字" 关闭断点
2 A, W& Q# }& w( b$ q"bplist" 显示所有断点
9 Q" t4 H  M2 s3 r9 a

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3414 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
& k! \) D* D/ x
4 T" }) E+ r8 Y+ ]$ Y6 p- @以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1969 天

[LV.Master]伴坛终老

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

签到天数: 2559 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 % P! r. ?5 [- O3 D$ K! G
5 S3 X$ R  [1 j" O' r0 G; z
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
0 Y# N  w+ @) |5 f& W% h6 J) H" P
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
. L7 q9 s6 X$ ?& \- M% j/ P# w3 J; p
CheatEngine搜到的临时地址当然无法对应MAME的内存地址% p* `& {4 [2 ^& O1 E) }+ i8 e+ k
8 T& K# g4 W: g% {. w  J" \
新版MAME没搜索引擎了么?. ~& `' G6 q; u- G% I
晚上我看看& G2 T5 z! v% T" ]
$ f1 p( Q' q; b' \! X. Z/ ]+ d) r
MAME查看地址的功能还是有的
4 k& i% l, V/ w菜单里的第一个选项就是显示内存地址. @0 [8 \  O3 t, t
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1969 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:. f2 J" \  K- s, H
1.DEBUG版MAME有作弊码查找命令
9 k5 X* `. @2 d( i# b& [# J1 X9 W0 n/ g3 v# U& Q8 |
命令如下:
5 ?4 [2 D" T1 T9 S4 lcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
; r/ A& f: m1 D( n' X  K<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型9 `) l; c0 E& R: \, L1 m1 {
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
9 n% w& g  G: K2 ?<swap>是决定字节是否交换. m8 l$ ?# P) d1 {2 O( L
<address>是地址,地址必须用十六进制表示,例:0x100248: C( s1 K( V! C, `, C; m
<length>是地址长度,长度必须用十六进制表示,例:0xfffff- k! v! X3 D5 o
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
& S; _( T& N  |' z+ c# m, m7 F" `: }5 ]& Z/ U5 e
请打help cheatinit命令获得更加详细说明: j3 A0 F# c6 {7 g
0 I% h9 g* q, v: }- f- n/ X  Z) H
cheatnext <condition>[,<comparisonvalue>]
& s, u: Z; s) j. S! z: T<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]2 O: B( O4 O4 f/ t2 G
[eq]是等于$ y5 ?2 p# M( B, F
[ne]是不等于* V1 d4 U. Z2 p3 J
[de或-]是减少
5 C4 g2 ~( c1 i4 |( ?4 L$ ^[in或+]是增加# S$ u4 H( k- x! R" d
[deeq]是减少或等于
  l! F# W. M0 i[ineq]是增加或等于
8 E6 \: ]; z  }# x' l1 N* h3 m[lt]是小于4 m3 Q( {5 `4 b
[gt]是大于
3 G, I% m+ X) _! [) |[ch或~]是数据有变化
2 M$ D% I3 u& o  `- F& t! d9 y. x; ?* l! D7 P
<comparisonvalue>
2 W$ X; I; G) Y" r) C! O  |2 z  D要搜索的数值' Q' @7 z% s* A" m. T8 x8 g
4 V( G+ }6 c5 Q& V; \+ t
请打help cheatnext命令获得更加详细说明- ]* ?4 O, }( @; A6 X

- f2 |1 F1 L' h  V* scheatnextf <condition>[,<comparisonvalue>]+ D3 I9 I1 V$ i+ b. }% K9 h
说明同上
9 R; [8 R# D, U3 L* X) q. k
, ?) ?6 Y! G; u, x请打help cheatnextf命令获得更加详细说明2 Q3 ]8 C% ~  k
& d2 i0 M: C) B5 K9 R. x
cheatlist [<filename>]
7 W" s+ o0 `3 L- U, u% Y8 }4 l显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件' G$ |5 ~6 g# o" V

- d  D  `% t* J4 S请打help cheatlist命令获得更加详细说明: N1 E2 r+ F" u5 d

7 x1 p4 `" V! g4 D+ E5 s" `第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化+ k( d0 ]6 R% Q, m

# u, o8 _/ e0 l$ S$ J  O之后进行第一次数据搜索时要用cheatnextf命令来摸索
/ p  C6 x" {# e2 w/ ~$ s
6 w# t5 A& H/ `到第二次、第N次数据搜索时要用cheatnext命令来搜索
5 |' f" g! |5 L' V5 ]1 H: K3 t, S: ^
举个例子吧:
/ t4 W8 ~. ~* M5 B7 v
6 J+ e% G+ y8 K# T$ m以合金弹头X为例:
) a  T. b# ]: p2 X- f1P生命数是2& n7 H2 l, r. A: g0 T. M  J
  e7 W1 P% j, |! R8 q
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
" N* k) F$ O; q2 H. r+ ?4 M8 T" x- \# A* Z6 \2 o; o% N( N2 \
命令如下:- {( z3 ]. p! l& U1 C1 p* ?, ]
cheatinit ub,0x100000,0xfffff,0
- t& [# U: _& P1 O* t
- X% \- G" }- o0 C& e再用cheatnextf eq,2命令搜索生命数2, U, V) i4 F# p; m6 Z7 q/ e) s
9 w. ]1 o! V3 c8 K4 ~
cheatlist显示搜索结果
8 R2 z! u# `( {; D
! c. e- l' p. Z9 c死一命后用cheatnext eq,1搜索生命数1/ ^- V0 i* U0 T  _& T" t
8 E! W$ H8 m) q. f+ v
cheatlist显示搜索结果( s1 z' M: t$ {. L2 Y- U4 q
.......
1 B2 V) j8 l% F; S# e直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
  v; |( T8 c  \! s, G: |: p) s$ V! q. L0 J  g
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
: ?& X* A: a5 P- z5 O5 K! v" S% Y1 T; Q9 _! w/ }3 ^5 M
没作弊码的话....
7 ?3 a$ l7 h, l5 i
+ {9 C& i, G1 `" j; \不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)$ G4 ]5 `* K( a2 Z

9 P: i3 y5 r- f7 t  R' ~: N或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)1 c9 C# k1 @, E! ^0 r7 m- Y
, Y; I" V5 b+ n. \6 P, I7 f
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
& p) G: l4 \2 x: U" Y# T2 M" }' \9 a' ~3 [/ U( {
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

  I9 u3 b5 y3 n; u" M& T+ B: f4 q  k" W& f+ o& f
回114:% V- u+ v& [- A
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M), J6 E" s5 g2 q% m
2.没地址如何查询地址?看上面我给zsyf的回复
9 ?- D9 Y. R. @8 ?' N0 _/ {( z
) }# l( b" @7 L8 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. 幸运榜 / 衰神榜

签到天数: 2943 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-6-5 19:15 , Processed in 1.098633 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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