EMU618社区

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

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

  [复制链接]

签到天数: 1834 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
" j7 C$ H5 u2 x. K3 X6 Q/ i2 j
: |4 z$ F% Y: K. H2 p3 W(1)如何加载ROM2 j5 A- v4 P1 Z6 n* Q. g# D7 i9 s6 O, A

! {) |$ M: y# P3 D) m0 Y先说说如何加载ROM吧
" j0 o$ H5 J5 E. O3 [0 `- `0 r' M
6 y. {% O' i8 E2 J; g以MAME 0.148 DEBUG版为例:  H4 g; L9 G% E3 R" c5 I( K' U
4 X! Q2 _# \0 b+ N5 \" B
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
$ s/ i# l- q( m; C2 ^- j
' Z9 B3 r/ j8 F注:MAME官网的MAME是命令行程式,没有GUI。$ W7 t# |. h# C+ q

3 P, @& c1 H+ l  l- ~4 j2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;5 \2 `0 x  e5 o, r7 t1 ?1 Q
1 u. K* M: x* D( k, h. |8 g- k
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
) D0 q# R1 G. J/ `% F& q, L
  j% J  V% e0 m( m' sd:回车
, ]1 W8 O' y6 R2 j- D- X2 T; [6 p* n% E- R  A- Y
cd mame0148b_debug回车" q7 U  O0 `# l( j7 H5 Z' J

) D+ B* q6 f7 I+ G4 ^如图1:, Y+ d" s! g% |
% t" M. G" |2 h: o% H

; F4 X, z# C6 ?/ |+ M& v/ e2 A4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
: N5 T1 i# f; ~4 Q9 V
6 y- a& L( E. r6 o) ]5 y& Z+ r/ r* [) T( G
& ?1 N1 X$ W: i. U* g8 p
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
: T4 }1 z4 o( k' ]! M7 m) y1 d8 P
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
, x0 F0 s- e- b7 Y2 u1 Y  }% L4 V/ _  N+ ^
(2)如何呼出/隐藏调试窗口5 _& e( h/ S9 ^2 a+ ]# D( l5 r
6 H* R$ A5 x  C9 _+ Y
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
5 J/ }1 t+ L2 ?  C5 s
# ?, K; a* a+ z! I5 u: v6 G* E+ d8 }. K  l
" X( r# A  d& J' O
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:- G4 F1 g' G/ t

9 O9 G( M8 O; M8 f
+ V7 p: F3 E- l: I5 F; R' K1 @4 a+ q8 D. |0 ]9 A7 f0 V1 C
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。5 l- b, {. y. d4 D; d+ Y
. K& V" Q0 ~( M8 x1 Z6 t- r; D
(3)如何下读/写内存监视点以及程式地址断点% D. b- p  g, j7 _5 a* O7 G( R

4 b* K! A  {( S1 r先说说如何下读/写内存监视点吧$ T4 B3 R9 Y% L" R' @! }; d* Z( q
% a, l$ O& w- c  ~- i+ i1 k+ f
监视点命令格式:wp <address>,<length>,<type>,<condition>
. J7 X; ^- u. g% Z: K  x5 n0 d! e3 X2 |, J- a
<address>是地址
+ w- _( d* p3 d% e, E( C# s- ~1 ^4 J+ c1 \4 f' k
<length>是数据长度,长度必须用十六进制表示% r- u: n- ~8 c" z8 v; w; I& _1 m# P

# G7 f( c2 c& \. l# w' N  K<type>是监视点类型,r是读,w是写,rw是读写3 v% z2 b* w: \" d( D5 W; [
* C" [* I. p4 _5 y6 |
例子:5 o9 h+ F6 H4 @% D4 }2 d& z

1 b9 W8 A  R& E+ D! E9 a例如对ff8569地址下写监视点,数据长度是1个字节( G) g6 W. @% v2 G  e# C( c

& P3 p+ Q: b5 m- C+ E2 i1 d/ ~: ^wp ff8569,1,w
# |" N+ ^' P! s. }0 j
% x' g) I; v& k9 X+ N例如对ff2235地址下读监视点,数据长度是2个字节$ c2 F* |. F  s8 o
' l) i+ u- E6 J, Y+ s, X7 k. r
wp ff2235,2,r; ?2 P$ v1 S, E9 S

1 ?  A4 o; L( J5 z例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断7 l  \& P+ c' ?- M

0 B& F4 l- U: c  jwp ff7533,1,w,wpdata == 01 M" M6 G! Y8 o& h7 U/ q; v

$ A( L4 F; M1 r: }+ T以龙王战士日版为例:7 d0 [( @/ o7 g8 W* T, x  J
( u! A! o2 j7 E* C
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
% f) U$ z7 V  U. [7 V* }7 [: o: w7 s- a% j3 A
! ~1 F5 G  S  i: Y; r
) n5 A' [! g; V4 O

% O( d; I: D6 H* g3 m2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:# o# k( Q, R- M

2 e. W6 M) ]. O0 f6 c( d4 _* k
" u! q; ?; ?" |6 G6 v4 y$ l
  K* f; x  K( ?; q接下来说说程式地址断点9 J. K( f1 c4 E
: a+ _3 f0 V- u
命令格式:bp <address>
1 u% c* h3 J6 R) `+ I4 l" H' K/ A* i3 Z/ Z& ]
例如对000488汇编指令地址下断点
; L/ W' A8 `6 c  }8 s
6 u4 ^1 ]" w, a* k9 Qbp 0004888 l9 x! O' I# I+ q8 j
: H/ ~2 Y$ S& j$ q' ]7 K
当程式执行到000488地址时就自动中断
3 I1 p+ ~! `' F+ q2 n& M! ]* ~
& L. X" S3 p9 {) b更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看4 g2 |$ F0 z3 H* e, ?

) u! S+ ^; h  b有错误请指正。
9 {: X, U( x5 t. D5 C+ L* d' N3 k2 {1 z; O, b( E8 N
补充一些命令:7 |2 U$ k9 _0 F, o+ I9 R! I6 n
; s' E( |3 t0 F/ s
"wpclear" 清除所有监视点
' b% U! u5 v. [# f$ @' x' x"wpenabld 数字" 开启监视点, \7 l( a# d5 Q. q% P( }; r
"wpdisabld 数字" 关闭监视点) T% Z& K! R$ f% H
"wplist" 显示所有监视点
. C" q2 X, `! t& a/ r8 `0 p& b( L# n" z" l
"bpclear" 清除所有断点
$ a, Y0 g1 F& y5 }, M"bpenabld 数字" 开启断点
7 f9 ~& F9 i: N"bpdisabld 数字" 关闭断点* `, Z/ z- w& d2 I3 X& H
"bplist" 显示所有断点3 Z8 l' V) q* L0 y

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3278 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽* \* ^! x' T) D4 M) r- i1 Q

; X$ ~" |2 A; O; T5 C以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1834 天

[LV.Master]伴坛终老

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

签到天数: 2540 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 1 F! O7 B3 y% S) g+ w  s- l2 K

) @7 }% {' l& U9 f; s! J太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
/ @1 k2 o- O! {2 `' A2 T$ G" V/ Z2 {% e- |* F" v) D4 s# Q
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
. k9 v6 V! U2 ?# h& i8 u( \4 I9 G
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
; C$ X8 w, g2 ^) r* R' M! F
" x( _) }) x' U$ {新版MAME没搜索引擎了么?
1 g1 `- ^9 L& w" R晚上我看看0 z: m% ?; Q7 f& Z
& n' {7 _2 W2 }) n
MAME查看地址的功能还是有的" c/ s5 p6 Z: z  w- f6 Z5 k
菜单里的第一个选项就是显示内存地址
9 N9 z8 x* d) ]# f: H& M0 @! B不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1834 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:3 C4 Y& x* |( z# \* \
1.DEBUG版MAME有作弊码查找命令
0 _9 O3 j# u& Y( K% Z5 T# @' [2 x# N* Q# T" B; Z! Y& R
命令如下:0 x/ n9 Q$ a( {7 K4 |5 v
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
& R2 t3 p2 d6 {' J7 a<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型4 g" b6 s6 h1 k! O
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
; O) H. q2 `- \/ M' S<swap>是决定字节是否交换
4 ?) I4 |- }. t& E8 _3 @<address>是地址,地址必须用十六进制表示,例:0x100248
/ {4 Y( \( V2 C2 i; D$ `<length>是地址长度,长度必须用十六进制表示,例:0xfffff/ ^, x+ ]2 E- U5 ^7 ]5 L
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU9 ~+ S5 G  g2 v. Y+ a( O0 r) V: b

8 D3 M7 f' w* h9 E- ?  v2 Z% {9 G0 ~0 A请打help cheatinit命令获得更加详细说明6 i7 P  a& u7 J) h$ O
; @( U& ]% W+ C5 N; @3 ?% Y
cheatnext <condition>[,<comparisonvalue>]: G/ J8 d9 i+ n- ]
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
6 C7 P! j: m: w1 V; n  e[eq]是等于
* l) ?" y3 S" _# ~7 H[ne]是不等于/ ~) C- m; J7 c$ Y  W  K# v
[de或-]是减少; t8 j3 H% D) E* U' [
[in或+]是增加
; F2 H, M' M  _2 Y$ {[deeq]是减少或等于
! I. @' A" K! |% @: C- M) D( j+ e[ineq]是增加或等于& K  b4 Y4 r8 |" ?$ r
[lt]是小于. c: I! k8 C- m! W
[gt]是大于
: {7 Z! W7 f. g. y, ]0 I" X. I[ch或~]是数据有变化
4 p/ U7 j/ N) s: C7 `" j$ |9 I  a7 G/ K* F8 i8 }
<comparisonvalue>
" k. j" Q# }3 ^0 q3 y要搜索的数值
4 {3 ?5 j, H1 v0 i7 ]- {& q; x5 t6 ]+ X
* v& e( h+ b) V/ A5 k7 d2 L请打help cheatnext命令获得更加详细说明
+ a8 c1 A( m# Y, T+ c4 |8 _6 ^4 |4 N' E0 @
cheatnextf <condition>[,<comparisonvalue>]
1 ^! n1 k3 N1 F9 k" S; k) f+ }- X说明同上' F& o% \" r/ P
( m2 j' x0 g) D+ P' D
请打help cheatnextf命令获得更加详细说明6 l! S3 p( e2 r: e( U2 k1 f; V

* ]& g  D& q5 ]$ g) @- d- B# Gcheatlist [<filename>]6 ^4 L* J3 f- o' x) e8 m
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
$ k1 ?" [* u5 x/ R! s- S0 ?& [( c. B* g& d- T
请打help cheatlist命令获得更加详细说明5 P" Z8 `1 m/ |+ Q
6 C* |# v5 _7 |# U; I
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
3 @# x8 X% L% K/ r- C7 ?7 h0 v' P8 f
之后进行第一次数据搜索时要用cheatnextf命令来摸索5 I7 m% L. y7 \, S& t2 H. U

% C5 Z. J% U7 L& R到第二次、第N次数据搜索时要用cheatnext命令来搜索( G6 V8 M# `3 l) [

6 T: B0 x% F7 s3 e% J举个例子吧:
2 f& |( U% N* f* N4 J2 d
$ v0 g; K# N) `2 I/ D2 U以合金弹头X为例:
. {- h3 x$ ^& w- {; [2 U. g& |1P生命数是2; s+ ~5 v) w' [' ]+ i( u' n
; E' M& H& b2 @8 O' H; h! b
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间/ R$ a! g! W$ ~
8 Y" V1 N/ W% f* ?( b, [
命令如下:8 H0 M: d' t( \/ A) m! h/ n
cheatinit ub,0x100000,0xfffff,0+ D) J7 z0 X/ s

; b. x$ C/ P+ p" k4 a+ I5 @再用cheatnextf eq,2命令搜索生命数2
1 g7 K. J% _  e# f  Z( e
; v# [, P2 M; |! c2 n$ g0 |. ~cheatlist显示搜索结果! c2 r" ^% K- [; g
. Q9 x/ \+ w9 h+ M
死一命后用cheatnext eq,1搜索生命数16 S' _! _  U- ]; @# A
" A7 _0 v; `& K" D# `
cheatlist显示搜索结果
# L6 N5 ~) o7 t9 @. n.......
  N, E( |1 J$ R% d4 o直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
8 ?# Z4 F' \2 I' Z% |0 d8 K  j# g9 I; d, H( t
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。7 }! v2 t6 w' ^! u: u3 l/ |

! e/ {8 p3 w+ H没作弊码的话....+ d( t" B4 f; k2 C6 ^' i- e

! \8 f. r! J( d! P$ [不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
! ~$ ], f; M% u* G, W& j2 `5 Y$ c! Z6 f5 j9 v
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
! G0 W+ M6 R7 y3 c6 |  y# h" [4 b, k" m' V$ [
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
# [$ ~) j) w' w/ J! f$ V4 c3 b
+ S* D6 ]. b) F+ O要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
) N" k. d& K1 ^  J; v! X1 t

$ U" [0 Z8 j0 E& v回114:
1 T; B7 o$ C1 h! @, x" r
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)/ m2 H! Q( c' {4 ]7 \" u. i
2.没地址如何查询地址?看上面我给zsyf的回复
, H- v; w, f( [, @8 `

# ^8 t, `% A% C# T2 V0 t' J7 @; Z打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2807 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-1-19 20:35 , Processed in 1.109375 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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