EMU618社区

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

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

  [复制链接]

签到天数: 1909 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。6 E4 o+ G6 h" U  {8 E7 n3 x
) o  S" C4 I8 B8 l- G
(1)如何加载ROM
: ?2 n% G. ^7 O5 g- Y+ N$ U: n
) e4 Q) B& a0 h/ u& ?6 H先说说如何加载ROM吧6 X3 m& T6 ?. Q. d

/ ?1 t: {% t- Y以MAME 0.148 DEBUG版为例:
6 B, h" G# R9 F6 C6 Y' N- d+ X" ~" I4 g& y: ]3 k+ f1 a4 D& ~
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html: [1 u& W; I6 f3 c* N2 S& ^5 n4 t2 x

5 S# h. Y. c% Z注:MAME官网的MAME是命令行程式,没有GUI。
* _( [2 I; Y. d
; Y0 I! n3 \6 r+ X  ~9 {$ f; W2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
4 G& J% R! I5 t. S% z3 M# g& a5 L( B: i; ]( e# f8 K- \% X3 U
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:3 [8 z% P5 U/ y& q7 N
! c0 c+ v% _1 R$ }
d:回车
* Q0 O; E9 k2 o! y' n7 H
3 L4 U, @+ ]1 acd mame0148b_debug回车2 `) r, R+ p4 V. k6 n
' b+ Q" m' m6 l7 Q$ M. B7 P% ?" W
如图1:
3 _. b1 y+ E# q8 J) k+ V
8 u( K6 C0 ?# S. t- h) F
6 ~; m( W2 ]$ C+ ~* x8 \+ w; ~+ ~4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:; Q% S1 t0 M( }" B% [( G

& P, T% a2 n+ x  x6 z, G6 {/ B" i
# s; i2 G" f/ M, C/ k( l! C
3 u% O, X/ X' {7 ^1 J' H5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
) R3 S: U# K4 h7 B+ ~- U$ @0 Q8 Q' c# }* D/ O& m6 d' y- k5 R3 ?7 \
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。6 ]+ ]1 C3 x$ D( V8 O0 e4 \( h
8 _$ R' W6 p4 ^( a0 O- I# K  f8 G
(2)如何呼出/隐藏调试窗口
' s6 W4 ]  ^' I( q' D
" S3 Z/ q; k* t" F1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:3 `. C/ ~3 H9 Z" E: N' m

4 p# h5 _* d- a) q& h( U; q; @+ z# f# D  X/ I

9 A0 C1 L6 U) u9 v; S2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:! J# c* N5 q0 _- \" \/ n
9 N& \4 \& V6 h# P! X  n" c
; P. ]9 b  `8 F

/ ?' \: c+ T* r& u3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
8 Z$ ?3 b4 H; q/ s8 G+ S7 b# d/ B# H
(3)如何下读/写内存监视点以及程式地址断点
" e' N4 H8 _5 |  }# R
) f" P7 ?& _" d. b4 G0 F. E( o4 q% b先说说如何下读/写内存监视点吧
- Q% O, ^6 U1 z$ T& W+ ~: x9 `% I1 ~# m2 H: l
监视点命令格式:wp <address>,<length>,<type>,<condition># H% y! N5 Q3 l# }
" f+ `) D. i$ W9 g0 z" ]
<address>是地址
+ n* ~! }" e$ D5 u3 c' P
6 }, i" \" b' ~& R<length>是数据长度,长度必须用十六进制表示  f  ^# Z# u$ H& v6 w. A

. @, K4 n9 |0 U- C<type>是监视点类型,r是读,w是写,rw是读写
+ P; d- A. B3 t# s
& t2 v7 t+ {  c' N, r3 y$ j+ O例子:. @" p6 J' {/ j* X* n

( @- t& Z; n0 b+ c/ c8 H4 r1 m例如对ff8569地址下写监视点,数据长度是1个字节
( B* j' |1 M, F4 J2 E6 g2 a
$ C6 s3 {+ D- {, [wp ff8569,1,w
+ I0 r6 q( d* o6 a, Z8 A3 ]$ }+ u$ {( `, e& c
例如对ff2235地址下读监视点,数据长度是2个字节* e0 ~# @. C# R: D% R7 W* }  N
7 L- t/ l$ u( P9 P6 ?3 v, w
wp ff2235,2,r
# z' T% X7 c3 L8 a4 ]/ ?7 N; x! E& x- Y$ H: |9 t' C1 R
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断( \9 e+ X7 \6 S4 j( U' ]

) c: D/ p  Z4 d( L/ D; P6 n5 B6 Owp ff7533,1,w,wpdata == 0
& f6 @6 C! d  n7 {$ Q: _0 V- \' D& E- C0 x' p* C& Y. s9 s. G
以龙王战士日版为例:( n0 t& i1 w4 h7 {
6 q3 w% R) r, L6 l
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
1 a" R+ e0 t7 b. k  l3 y9 ?& Q8 l3 @+ d8 R4 G$ Y
7 P) J- ]5 ]$ I# i
% L0 w7 e, p& ?, d1 U/ e+ h

, w" Y: U* {2 p5 j) l2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:+ O2 v* Y- B% b$ x( n

3 p8 e- B: y  h2 t9 n0 o" N& |* G; i& R1 F. f- b
/ k/ M* c+ O& b4 r' G4 C6 i5 V2 r
接下来说说程式地址断点
, A3 o) \) ^- ?: @7 s! g  _" b1 j9 E2 f3 i
命令格式:bp <address>
- Z1 V4 U& D9 R" |7 o( x
% e+ E9 C+ B7 a; Q6 ?例如对000488汇编指令地址下断点7 p7 v, }- h, z2 A* U  ]

! ~5 B, n. @+ c  J7 ubp 000488
( R4 v# K8 ~# m8 j9 V
. N% c* c* \) i$ _, r当程式执行到000488地址时就自动中断
4 R- ]' `3 }6 @7 U2 g. l' ]0 e; ], d" z* [$ c9 \. @6 O
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看  Q- F- d3 [# p

, e9 u3 E3 N% ^9 P有错误请指正。6 e% D) P8 O) T* x, h9 r. U/ E" K* A

+ D& P) o, i9 N* o- _) Y# N补充一些命令:: _! ^3 I7 ]1 {0 i7 C

; O! X/ Q5 {& e  j8 [$ X3 s"wpclear" 清除所有监视点) o- I1 u. l& H
"wpenabld 数字" 开启监视点  k; y* i; o: c' R* F* S5 Y
"wpdisabld 数字" 关闭监视点
+ P9 k) E" [/ T2 h4 C+ W6 D"wplist" 显示所有监视点
6 |  X% h# Q/ a4 q, K- M# H- t! Q  y7 x8 D3 a1 N
"bpclear" 清除所有断点
* ~+ m; x+ d9 R0 _# }& I$ [4 ^"bpenabld 数字" 开启断点
6 S  I  |4 Q# E; u"bpdisabld 数字" 关闭断点
+ Q5 L+ f2 h; m! D"bplist" 显示所有断点
0 h/ O7 ]8 Y" R

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3352 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽2 P% T: T* X5 ?) ]4 h( _

8 b+ B' ^, u8 Q4 n! a7 }以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1909 天

[LV.Master]伴坛终老

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

签到天数: 2551 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 9 _% o& e$ i& n8 o
! X. J7 A# l6 v# C4 h" Z
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。0 z, t$ V9 x' R' W% t! q
# Z/ @8 U- Q& J. M! ?5 B
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 ' G* h1 w# M. N4 n
& v" V3 F5 U' P) Z2 @) h% k; l
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
: a# C4 g! }/ m4 W' T% c  F! `1 F" z
% k& y( K$ K3 J( P* m4 }4 A$ `新版MAME没搜索引擎了么?# _+ M+ d# A. J& z
晚上我看看
$ D( {: F9 g' g2 p& B
2 u! k0 c+ ^3 [) UMAME查看地址的功能还是有的( K. d7 K# m& l6 ?3 V% n: m
菜单里的第一个选项就是显示内存地址
: i& x) M2 d) M" C; {# _不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1909 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
6 M! ^9 l# ?9 V; A' r3 r0 H4 X8 p8 O
1.DEBUG版MAME有作弊码查找命令
+ Y3 |9 X, u' @7 y/ {
- l) O! F9 H) e3 N: r) M命令如下:) A: P  g6 W: F
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]4 T1 j" n, v: D  D
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
- _( e, E5 B5 Q5 K. _<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
8 h1 p- R8 D# n- k<swap>是决定字节是否交换
! {1 q" D9 l4 ]$ D1 U( [<address>是地址,地址必须用十六进制表示,例:0x1002481 C9 z. W" |3 c6 D! M( ^
<length>是地址长度,长度必须用十六进制表示,例:0xfffff7 V: j) ?; \. C& j0 ^& y
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU1 t( q: x' O# b: O. X& x) ~( W" ^

' s9 E  t( T( {1 ^! }# |请打help cheatinit命令获得更加详细说明9 S& u& q. {- c3 j$ M
  ]: J; m) Y! q. H, T* V$ q
cheatnext <condition>[,<comparisonvalue>]- b2 D/ q  s8 h9 K
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
. |3 W. Y4 l- R1 a[eq]是等于
, {0 m8 b" z9 i3 d( A9 V: A[ne]是不等于2 B; j* i/ ]8 l
[de或-]是减少
* R$ R$ n6 v+ |2 Q4 w[in或+]是增加
. r/ j; V+ a0 D: G" l[deeq]是减少或等于. T* ^: L3 ~  q+ v  o
[ineq]是增加或等于# ~' I1 b+ C& }& r& C+ w
[lt]是小于% \6 t0 ]: z( I/ L3 \
[gt]是大于
* c( f" G# K3 p0 g. \[ch或~]是数据有变化8 c$ i+ y8 h( ^
- R: [1 w! r% h
<comparisonvalue>
5 z6 H! k4 Q. _2 v要搜索的数值
, _( ~) z3 c- G
/ Z5 n4 T% c4 z请打help cheatnext命令获得更加详细说明
* K; P' M) q9 n% @/ j. f) n' W* X; E0 j2 G6 u; @3 L4 l
cheatnextf <condition>[,<comparisonvalue>]
7 B$ ?8 W1 ^% r3 J; @1 ~* D说明同上! [1 `/ [- G- m1 O

" B- i/ B" X, D6 f/ b' f* E请打help cheatnextf命令获得更加详细说明2 f& M# P  ^9 ]. R  h4 E
" o; \& \+ D+ ?
cheatlist [<filename>]
0 J2 j; ?8 g$ E$ M4 i显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件4 _, p  L7 a' g( S' r
0 y& O% d. c3 p7 r
请打help cheatlist命令获得更加详细说明
8 C! v1 ?  m: J
- N: k( @) T$ }: ^- g# V第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
8 {0 N- I/ _5 w) \: l( g6 C
/ v+ g6 n0 X1 D之后进行第一次数据搜索时要用cheatnextf命令来摸索4 U' z+ c) l5 f" ^5 p
" u' ]1 ^$ B2 L2 @/ A
到第二次、第N次数据搜索时要用cheatnext命令来搜索
4 g% x& a7 C1 m$ [7 _5 n) h( @6 M/ j% q, r
举个例子吧:
8 E3 a  b" i6 t% x. X
" }0 L8 h' Z7 k# b! y( J/ d' @) \以合金弹头X为例:$ w7 T6 o! N- ^$ z, R
1P生命数是2
5 A( _# f* v- ^, z
$ h, T: f0 A) W; J3 i( L6 o8 \先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
/ r- W: s& n& a; U# o; U( G8 \% U
命令如下:, v! n/ s: O" K3 u% A2 a
cheatinit ub,0x100000,0xfffff,08 T. \( X* [0 W% C; e% V8 `

9 [- O- O$ N2 x  D. _! m- k8 N: n再用cheatnextf eq,2命令搜索生命数2( \9 r( F2 V/ E& X0 A1 I
" t6 h' {/ B& W4 L) O2 U
cheatlist显示搜索结果
) ~; i9 v# N5 n4 i
! I, J" P  ~: E5 i* t5 \死一命后用cheatnext eq,1搜索生命数1! N: Y# x6 U: j: a6 \& P
, L& l: {# }' l0 I0 N$ L& t3 g
cheatlist显示搜索结果
( N4 I, Y* [: C.......! [! Y( f$ h. d7 A/ J
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果7 H: Z* \- r- O7 P: V2 J

' r0 E$ r: F: B9 X还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。% Q. ^/ D& Q0 Q1 v8 ]$ F
& b5 Q& g. `: W  a( K1 S
没作弊码的话....3 w" I  E( U9 G& A9 Q, D
6 Y  }) x) d7 n* g% z0 J
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)4 r: G9 F0 c0 j6 R; N1 o
0 e$ ~; H/ h+ u
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)- {. `: o' a1 @! o
5 e5 i. a$ d+ ?- H6 G
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行6 V3 `- h5 j! ]

3 @0 X7 X) p& Z8 S; }要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

0 X, U- R, ~! x( u3 f7 b0 D( K8 W; r: ]! M3 t# C' ?
回114:
3 v" N; J3 q5 R+ e. [
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
- ~3 ], M) O5 q" j% z) Z- }/ z9 \. w2.没地址如何查询地址?看上面我给zsyf的回复
' K2 g0 R* P6 ~9 t$ Q9 k; A$ O" A

! y: G$ |# C  p8 z; l8 {6 S7 e, U打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2882 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-4-4 11:41 , Processed in 1.170899 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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