EMU618社区

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

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

  [复制链接]

签到天数: 1770 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。# K4 h% V% b. s: P" M$ c

* M8 V6 ~: k4 }(1)如何加载ROM
0 |/ p; F3 R) S+ L- ~0 u
0 d7 y! c% r+ W# G1 C  R先说说如何加载ROM吧
; G, C7 \& \6 b+ ^: T% T: e2 Q8 r. o/ K! j
以MAME 0.148 DEBUG版为例:8 F% S% Q  i- `, u: X  M+ ?( h
" W# X4 L3 Z/ s  I2 @% R
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html3 A: O! J! v3 e
8 P" ^" X1 g! Y% d. s, o
注:MAME官网的MAME是命令行程式,没有GUI。
) |0 O: q3 a3 S% V% N. V8 Y1 k8 I' m' W1 D# b3 G
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
" A, b/ P) ]" s; g% ^. ~* L5 H5 ?) U0 g( I3 u+ P0 D
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
5 `! m0 Q: |% h$ n; ]
  V$ n7 J9 c, Y- L& G- q8 _, Fd:回车! z5 M, f0 N" b. W' o

+ |& e6 F, Q) _7 S! pcd mame0148b_debug回车) X6 y. U' I6 f* }
4 h7 D6 L3 @) h' A7 U) e+ _
如图1:
6 q% e& Z/ T6 ?) y4 n6 S  s. ?+ X$ T% V
( @1 O# T2 G0 L5 T, b- f
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
: a1 a3 O) p1 Y% b+ t
2 t- K9 B: Y7 f, z- P; v& b( D7 S( C
+ y9 G; X- K) e
0 e. S. F( h* N, n% H' A% f5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;& }- w* R2 O. E8 ?/ [
5 B, x( ?& |' F3 s2 D& c
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。# W6 Q3 R9 h* D' J+ H2 Y

+ O# O# o. J" B  ](2)如何呼出/隐藏调试窗口
: q3 ], e8 \" B+ I! N3 C" F; C4 f, j. {& W
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:$ z# z2 e7 f/ w

+ b9 ^, N. l1 O$ i2 X: ~/ q
( w! a* Q$ S3 {* }. _- L$ A9 c0 j. }; V& G$ u
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:9 |$ M# d7 d( G

7 P0 S$ }9 e; H  U" v9 d3 R) c3 I( ?% L4 K, f
& K- {; \5 V7 `9 u- \$ ^( F
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。, j$ T2 a2 {; n

% X+ r& o+ H" Z5 K! l( T: @' H(3)如何下读/写内存监视点以及程式地址断点( N: Y$ p, W) z0 G+ |

, V0 Q" W) J! B: b先说说如何下读/写内存监视点吧# r7 q8 ]- G! t2 j3 e- V

7 A8 m$ Q2 M8 V2 p# k5 t) p监视点命令格式:wp <address>,<length>,<type>,<condition>$ U) w# Q7 f( }" _$ x+ M
" Q: f7 Q. V; y! i8 Q  y  a
<address>是地址
  F: o1 L3 }# i2 L. U; [; u$ T# m
  |7 X, L/ I- r7 b% w  a% ?<length>是数据长度,长度必须用十六进制表示8 v% L0 W* Y* \% L( ?2 U

$ g2 t1 d0 i; Q) {9 P, T<type>是监视点类型,r是读,w是写,rw是读写
0 G7 q- k9 j$ s! b1 C  v; w/ a
* {* x. b  Y" m* X. d" t& O0 e/ c例子:
2 T9 n6 M( P' [/ H% l
- o8 o5 ?# Y  k) K8 W& S! B) Z. ~/ E+ k例如对ff8569地址下写监视点,数据长度是1个字节. ]4 l8 M# ]. D

5 q' `3 I8 g; H! ywp ff8569,1,w, m9 ?' X0 p% j, L
, c) Q7 F# |2 H
例如对ff2235地址下读监视点,数据长度是2个字节
( m2 a! M7 S. R1 {/ Q  ^6 V0 s
* _( t, J. _* a; K, s0 j* E7 _wp ff2235,2,r
  [, N! j, J: v4 c4 b6 N$ W& r' E# k4 l. B* [/ ]
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断( e3 V2 \! z; M, m$ z

5 [0 m1 [7 e" F0 ?0 ~wp ff7533,1,w,wpdata == 0) q$ _- W. |0 X6 j0 d" Q& T5 Z2 O% j
6 r; t, @! O* ]' i3 H' R7 z
以龙王战士日版为例:( s( I3 k6 q7 V1 f6 b

" ?  u+ U& Q+ O7 K4 N7 o* s1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:3 \: }& P5 m% F) Y" y. t

- V- W6 L3 t% k/ a8 c6 b$ D7 L, ?: p7 \5 r" ]% o9 M$ n
, w9 O5 B- z2 v# t

: u  g* m( X- e4 U% q; U2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
; j8 C- O" ]" n( y7 [+ Z. j0 L: D$ C- f3 b

9 V( Q2 [( N* m- v2 h( d0 v! d9 p( [) E3 z" Q
接下来说说程式地址断点, Y& C5 K6 k1 w4 q
) k( f) v6 S' s" j4 y" l5 t3 \! {
命令格式:bp <address>3 A& i( M3 G, A4 p. v

3 V4 [6 g. h& \& z例如对000488汇编指令地址下断点
2 R* g! @' e8 b( O' y9 {6 J) B& i% _) L. E- w, n, j
bp 000488
5 G9 a$ w5 I  i& k  T, h  r
+ [/ @+ f* N3 p' q! U& ~! L9 E: J当程式执行到000488地址时就自动中断0 A0 A8 p/ M7 C) x. x! Q, z

5 ~5 ?% c" n  N/ M更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看, Q4 N5 W# F( P9 i) B
8 j6 R& }2 w+ I8 l6 P
有错误请指正。
5 g6 a# A* A3 v6 C( ^5 {- P& Y! Y6 x& |
补充一些命令:2 `$ p  Z" U% A+ X4 e, N$ {& J

6 n! C- y9 W6 Z9 f* K2 `. u9 J"wpclear" 清除所有监视点0 m/ I' W- R$ [: F7 b
"wpenabld 数字" 开启监视点
# E" j1 U4 t& }; x- Y, r"wpdisabld 数字" 关闭监视点
' g* N+ n. x) \9 J"wplist" 显示所有监视点
$ O! J( c0 g; L, W) n4 {5 _) S+ @2 e& k, ~$ D& V! \
"bpclear" 清除所有断点  L' U! O( P8 d1 b! Y' s) O2 ~: l
"bpenabld 数字" 开启断点
0 M, f0 x7 S; j; c6 E/ a: h4 N% w"bpdisabld 数字" 关闭断点/ N, f+ b+ M* s% u% O. V2 @
"bplist" 显示所有断点; K  e# h0 g1 d; W0 I

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3214 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
: s- o+ a/ C5 ^% G+ b2 C
) F( K1 }9 W8 X' L! t6 q. z" b. {0 @9 C以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1770 天

[LV.Master]伴坛终老

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

签到天数: 2531 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 # H% C/ [* x- I: c
; }: w4 n0 s8 O6 @, `3 L1 [$ Z7 ?
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
& V8 U0 I/ a7 h7 \! [; F* J, O8 Y7 X* f2 [0 U/ w. @+ Z" Z0 N
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 7 J5 N0 p2 r9 _. i  k, u  l
# H7 Y( @) w, ~& |# V2 h5 c# R
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
0 D; p+ T' W" D/ J/ c5 G; F0 L* V* J: c
新版MAME没搜索引擎了么?- b  S( T- ]" p( M/ L
晚上我看看# Z* U1 g# H$ f* ?" t" h

( v; u- @  E9 f5 hMAME查看地址的功能还是有的
4 l! g5 Y. H! g) }2 N菜单里的第一个选项就是显示内存地址
3 }# b, D/ j( I1 K% c4 `% x5 |% b不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1770 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:* J5 c7 t& S+ b5 @
1.DEBUG版MAME有作弊码查找命令
  ]% w1 e( [: E! [0 b: ~' I  Z; p1 I9 ?5 j# G
命令如下:, n1 w: X* R! t2 t
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
3 k( o; F! K' h  B* i$ [<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型- @4 ^" q# e. ?  t
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)% \: {' d& ~" n7 }
<swap>是决定字节是否交换! R" e: I) z2 l1 o: b  _( `
<address>是地址,地址必须用十六进制表示,例:0x100248( C+ S  w9 ], X4 v! W) g
<length>是地址长度,长度必须用十六进制表示,例:0xfffff, e6 V. q% x( E; n6 M- ?6 s  [/ {
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
$ F6 t$ h3 S$ m' V* H1 T+ K
8 w$ [* x: L& I: Q' J请打help cheatinit命令获得更加详细说明+ o& `2 H" R$ h: n% H% c

5 w: {. ~7 T' I, }* @3 scheatnext <condition>[,<comparisonvalue>]# z; i3 i2 z2 \# Q
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
9 ]) k( c  Q& g4 f0 Y, M# c8 e. i0 ^' B[eq]是等于9 ?/ U$ L6 \. Z2 m) {
[ne]是不等于4 P: x, Z: U: c; x( h+ f+ d; `
[de或-]是减少
. z3 Z, n. T. J6 z# l[in或+]是增加
1 J' j, h9 w: H[deeq]是减少或等于6 \: M! [: ]) w$ [1 h1 ~7 V" U
[ineq]是增加或等于
( S- o* r# J) R9 U4 z, k[lt]是小于) E6 Z4 n* r3 H( p" b! n( }
[gt]是大于
' W/ u9 J. i: F: F[ch或~]是数据有变化
8 H& X5 Q( R$ Y! G4 u5 h; q
+ |1 b$ M& z3 q8 a2 i  z<comparisonvalue>
/ I8 l, c0 d- o. q& m0 ?% G4 E要搜索的数值
: q6 }" ^$ p! i1 ]) Q. ]. h' K, {+ j! Q5 J; G
请打help cheatnext命令获得更加详细说明
( U" @* E4 Q4 N. a1 o
+ ?, j/ J& ~6 W9 s' z% h% P& xcheatnextf <condition>[,<comparisonvalue>]
2 N0 @" `  a. J0 ]+ j说明同上5 C/ ^1 X3 W: a8 w8 m4 j
: |5 L( {. X6 n5 u2 d
请打help cheatnextf命令获得更加详细说明
% L5 J; N- B: J5 h) P% I( j/ k0 r1 E" R4 H% \
cheatlist [<filename>]
7 E6 k0 |: G2 R" j显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件4 j) E$ E2 u$ M

# E  @5 U" u! G& D$ j5 A5 {请打help cheatlist命令获得更加详细说明
0 x2 J( E9 X0 {; ^5 C( n7 z$ N
* K5 H7 r# g4 L9 H* U# u% f' _第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
5 J# ^) R( ?( r( g% {
$ K& v; Z0 ^) G$ Y9 ]# w! L之后进行第一次数据搜索时要用cheatnextf命令来摸索' k& w* A6 C# \" p3 T: n

4 X9 P; F- \4 T4 M+ |) G$ g到第二次、第N次数据搜索时要用cheatnext命令来搜索
7 O! h* m/ M# @7 {
" \$ U, _  n$ Z; L举个例子吧:1 S% Y" M5 M" r/ D

3 g' p) m. @* @, S9 @5 |6 N, a" h以合金弹头X为例:
4 ~( L+ W8 \  P, S9 S1P生命数是2
1 U4 e( y3 q" P4 }
$ S2 r6 d8 z% T" n) q2 X" |) E先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
0 c0 t4 B, q' |+ n
: b6 s9 `( ]( a- X命令如下:1 `) f2 t/ P$ ~) g8 b" }) s
cheatinit ub,0x100000,0xfffff,0
) P( d7 h! G! p' E8 T" n$ m* D1 }& |. C
再用cheatnextf eq,2命令搜索生命数2
+ U% Q' b* `0 ]! I
+ K+ @/ U: ]( [- rcheatlist显示搜索结果$ r' N! a& @. l& l

5 P, u! I: ?# ^' H0 K7 s死一命后用cheatnext eq,1搜索生命数1
5 F, U. |$ ?; }" o# H& J" ]* n- a2 O3 W# e
cheatlist显示搜索结果9 g1 ~: k7 n, h2 }+ M
.......
) Q! l7 O% d  K  r4 `0 y直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果7 u* R+ t5 {( N: y2 {' N% M  i

5 z7 ]. A) H: ~* U1 q) T7 S& K还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
) M+ ]  Q- e* D* C0 p% h2 G
# q, D1 k  O2 r没作弊码的话....* U4 n) b' |4 V9 ]! x

& {( t+ X/ _  s* f% x& s不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能); `8 }* D+ f" x# r' r5 |

/ [, H" T' r0 g. k* C* i或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)6 T' t: p" i! S" D6 _
5 n. T( t' T% p1 C  y
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行) b9 Z. B$ N/ ^, f# E0 G
$ Y+ J% V+ f6 q& E
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

1 b3 I2 v1 x, w# ^2 A$ b& |
! N  c- h9 J5 X6 R回114:6 K0 j- D' j0 d- M5 r' ~2 v
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
# z. p& S( q+ v4 s1 j2 P' b2.没地址如何查询地址?看上面我给zsyf的回复

3 V3 ~1 T6 R6 z/ C6 i# ?- Y- s( Y7 N6 O1 X
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2743 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-11-16 22:42 , Processed in 1.103515 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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