EMU618社区

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

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

  [复制链接]

签到天数: 1945 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
/ n; G  ~: K4 |4 l3 F% x
: O1 {+ x8 I$ d/ `, |5 R8 r(1)如何加载ROM
1 q& ^9 q2 B1 G8 Q; Y2 T( E. U- D0 D, a  s8 _8 R; `" u
先说说如何加载ROM吧' Z+ O% o( a+ @( E+ g+ M: q6 ?7 {0 Q

7 i# \7 E7 }+ |. I* S以MAME 0.148 DEBUG版为例:8 v- ~: {- Q8 t7 ?
( Y5 w/ y7 {& e% G, B7 X& P
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html6 C5 Z6 g4 u0 l8 j6 V5 W( p

1 A1 G8 M$ S/ v0 s) R注:MAME官网的MAME是命令行程式,没有GUI。7 `6 }' J! o; w1 X- H( p  `

5 ]' z  h. w$ `4 h6 w! i5 |" g# O! ]2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;& X( `3 Y! z% K* V) f/ Y) _
2 _4 Z5 F- I! |: [% _: y, e+ T* H
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:9 S$ g' B& p  _! c2 e: m( X) a. z

/ ~" k* \9 _$ _9 z( P, L- md:回车
; ], h  L$ X8 F; j5 m8 X& g
! |: f' v3 n' [- Ncd mame0148b_debug回车& W9 i3 c. C5 B

0 P9 c/ H2 A) h5 ]如图1:! k; J3 c& R+ Z8 T
% Z3 z( h6 B6 g% w" t2 j

: |- s5 o+ c& q( y6 b" D" x4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
# |' R6 {! i3 U# U. t9 ^# b- K0 a! |; f/ E8 j9 E$ S8 g" Q

, ]) I9 y0 w6 q
2 P% r- q5 I: Z) h1 k. @5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
9 d! j( N& T( L% M# h! ^- @
+ P) V# C7 x7 j, \& I/ _6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。' S1 V+ `! n! f, l5 V8 X
* x; g* U$ x* r& Y* p( B9 q
(2)如何呼出/隐藏调试窗口
! {+ {" @* A) O/ L# L6 s% J3 Y  J
+ w; B1 L6 {2 ^1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
' q( b9 y' X  r3 B7 \5 d2 J( o2 N: d' K# T

# C, h1 K/ {- c. X  H$ K' K: l6 s* H( v8 n1 c/ |
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:7 s4 T, O' Y* b4 J! V; w1 X

+ E- o  Q3 ^5 l2 p) @# s0 R2 r, P- J
7 r) g( m' X+ X+ f6 S6 k( d# `3 ~, P+ M/ f0 C) P* f
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
% l+ }  P0 d  R! {+ R! F3 m0 B
( T  d2 d* d  [  Y5 Q3 ?" X7 c6 G(3)如何下读/写内存监视点以及程式地址断点9 P* h) C1 Z( O: q% q6 V0 q) ]

3 [# R! o' ^9 y' {5 j4 D先说说如何下读/写内存监视点吧
& w" V8 p. g" _' f
- R9 d8 ^) z* F$ x* K- G监视点命令格式:wp <address>,<length>,<type>,<condition>
. }$ w1 c# ?- a3 M/ s6 V5 V, Y' P8 Y: v" V! p4 K) I. e
<address>是地址
% j+ `/ I6 `9 B8 ]$ F4 l* H/ T$ R# G) w( Y: }2 i
<length>是数据长度,长度必须用十六进制表示
, C# @0 l& J# O0 H; ~$ N6 y/ b& j& F/ _4 X3 g5 [8 i
<type>是监视点类型,r是读,w是写,rw是读写
7 b  W' y1 t8 c/ n: r1 T! Q' k. T$ z1 e, V. e: g
例子:
6 G' I+ R2 v5 q* _
4 F1 ^* x2 O. ^例如对ff8569地址下写监视点,数据长度是1个字节
9 x6 o! i+ R) X5 p$ N# y1 Q6 s9 W' _, w3 P; v8 t5 A
wp ff8569,1,w
% j4 j0 k6 P6 \: P& ^' }7 {; h# c, ?- g2 R: {7 m3 R
例如对ff2235地址下读监视点,数据长度是2个字节5 g4 [* u% @3 f# B8 h

. {/ @8 h( t! U: E. rwp ff2235,2,r  b- _: D6 j0 b4 Z4 ~$ G  `

8 D: `  Z( q! L- c2 j例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
3 k" T% x9 Y" |
, [7 l; _) ^3 _9 W* swp ff7533,1,w,wpdata == 0
1 W4 V6 D8 u& Y8 w# @7 ~
+ K) |8 m: Z, K; |" C- D: d- z以龙王战士日版为例:
. u$ @" i" B) M; N7 ~/ z& a& q1 @
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:8 h+ S; F3 e! V1 E6 b
# ^' r8 ]1 w# E4 k' C% ?
( j9 }9 e6 M# F# P9 z5 u& ?  _; c
, i' b  I1 g/ T( ~) w; Z- A

' w, R- {1 q% v7 _7 ?% f, l% `2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
* S0 z+ A2 D! y8 H( M7 k7 w. \; p8 v& E- O) D( G* s
" R6 m5 O$ }& \# E: G; }* z  B5 a
/ I9 w% n* s( B1 H
接下来说说程式地址断点
: Q% e& B) ?. f& _4 q, E8 Z; a  x) L) T# {% }8 ^* w
命令格式:bp <address>  z8 Z6 v- [8 y
0 I/ A7 Q8 U; @9 e; O0 Q
例如对000488汇编指令地址下断点
6 O- _; q: M, y% y: b# B* P! M
- o+ V" `* b2 X4 V2 Ibp 000488; n+ R* O4 |8 |. h+ h( _3 s

& W! q2 Z. L  B; V8 Z7 y当程式执行到000488地址时就自动中断
) `6 Z: u( z  _0 @: l% V# t7 Y  B- ~6 q( |% n, m
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
( H& X5 p; P9 t
( P2 a' a. R7 h3 R有错误请指正。
; z+ H2 Q; @8 x4 I+ D2 C" ^
1 I9 @- `! C# z% W3 o补充一些命令:0 g+ |1 }, U1 [( t+ F( ?; i

" F# m, W0 r1 p' U% \"wpclear" 清除所有监视点9 V# C+ Z, t9 l/ ]$ @4 r
"wpenabld 数字" 开启监视点4 h7 R! Q1 O7 C9 q! k% S' R
"wpdisabld 数字" 关闭监视点: U7 ]- z9 V4 [: m3 ?
"wplist" 显示所有监视点
, m% M+ y7 k! }0 `! g
6 T# `3 r4 r$ F  Q0 |# s4 x5 r"bpclear" 清除所有断点2 S' J1 L7 s7 s0 U
"bpenabld 数字" 开启断点& c" L9 a6 g. t
"bpdisabld 数字" 关闭断点
% s+ t, |7 e! c9 k"bplist" 显示所有断点
% l- u. u' t9 Z! o1 m' f

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3387 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽5 g- Z/ r0 w! g% s6 s0 v
& V- [4 _: E9 Q( E0 t  C
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1945 天

[LV.Master]伴坛终老

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

签到天数: 2555 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
$ L+ P, ?& h$ d0 ?* M5 i1 M  V% T& H  d
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。, H# L/ S1 V5 d# S5 G

. ^2 q1 a1 [/ f7 r  d1 Z其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 . x  V3 m) M% s( q  S2 _
1 j! z9 d9 G: ^' A" Q+ E% z
CheatEngine搜到的临时地址当然无法对应MAME的内存地址3 Q: l& g  a) W& ^7 t: t

) ?5 `/ d) M7 b* Y新版MAME没搜索引擎了么?7 D  M% c$ C# P* e
晚上我看看% j- F; {0 ^% ?, T) n$ L
) G, w* n, Y# @, y  M
MAME查看地址的功能还是有的
. D. b% K5 p& O$ K' O. w9 L菜单里的第一个选项就是显示内存地址
8 H5 B! u8 D5 `9 g  m/ p: L9 `0 r不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1945 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:7 X+ o* ~& s( R4 g( P3 O& U
1.DEBUG版MAME有作弊码查找命令, S! j6 T4 f; t2 D6 _

+ m) A9 W$ o5 m% z1 i9 N命令如下:& }& M! q0 Y" M% N  d. Z
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
) u( H0 t+ c7 U# T/ Z6 I) }1 Q<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型% p9 E, ^/ w, [2 q6 z2 q
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)$ i8 y  i9 ]( c$ H+ Y
<swap>是决定字节是否交换
% `1 I: Y# v, j( E0 F<address>是地址,地址必须用十六进制表示,例:0x100248( Q- o" c" L  B; E/ J; B) x7 D
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
( a1 w$ I3 A8 s1 c' r* u: o<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU( W+ Q. d; f& I% N) s

$ L! I5 x( Y9 p$ [6 a请打help cheatinit命令获得更加详细说明
% p3 A" H, E- r% s
4 g7 r8 s1 [* ^cheatnext <condition>[,<comparisonvalue>]! e# s% z2 F5 I. o
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
; d8 ^5 U+ s: W- P# \[eq]是等于% Q+ i% ]9 Y2 U
[ne]是不等于: h( y0 V7 s4 p& m7 }1 n& {
[de或-]是减少
/ @& ~3 m2 n0 ][in或+]是增加
  h- W% @( I) r" B% K. X[deeq]是减少或等于2 b  h$ @* d1 o$ s; ?
[ineq]是增加或等于
9 b: `) j0 ?/ Z& P; g[lt]是小于9 D( s8 l' h' a6 c
[gt]是大于' o6 z' @5 s. c! N( N
[ch或~]是数据有变化
- y+ M' a$ X# e4 K  n, K  {4 ]- b
<comparisonvalue>
$ h4 ?; Q3 X  ^& P要搜索的数值' d* C% g& z3 h  j% X1 Q

/ I% Q/ K. Q$ j$ n& O) e$ V4 m0 S2 n请打help cheatnext命令获得更加详细说明
2 T5 n' U% n, s! a3 N- _, Y+ K7 n5 F% s; n- t- E0 h
cheatnextf <condition>[,<comparisonvalue>]
' @' s6 s  Q" e: r" }: d- {说明同上& Y9 [$ i  g3 D

+ a; c3 m7 D3 I+ K. A- R请打help cheatnextf命令获得更加详细说明
: z4 C! @6 R3 e
0 K( N1 j- Z& Z, A. xcheatlist [<filename>]
" v' N9 _/ e% a  N# Z显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
1 l: w+ u! N2 G4 C- Z6 V+ D, _) T* t! K
请打help cheatlist命令获得更加详细说明
3 t. J7 t; k  C$ b5 {( [" @3 }* x
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化; m/ Y/ _) R+ _
- a3 y8 b! y; f1 \  j6 h0 j  B* O
之后进行第一次数据搜索时要用cheatnextf命令来摸索
. }6 d! Q% b2 u( S0 ~
* P% L+ s% K* k# _9 {1 D到第二次、第N次数据搜索时要用cheatnext命令来搜索# V5 a% l# r+ N) N5 G
, y- P+ \* @6 y  G5 y
举个例子吧:
2 G6 _0 l% m2 o) L7 H4 `
5 Z: Y7 ~, P: O& q. h4 G0 W) ?  r" }以合金弹头X为例:. E5 N) Y' m% f1 L
1P生命数是24 ^% I, R3 c  W
7 i# ~5 Z: N( B4 }
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
4 w* ~) ?; j. V8 \0 _8 ]! H7 o# c; V% j( k
命令如下:3 d+ T* p: s% g8 L3 c
cheatinit ub,0x100000,0xfffff,0
# u# O9 x( g( {8 B3 n4 }8 W- m  U, v5 k# @* y( G0 D& z
再用cheatnextf eq,2命令搜索生命数2& S: U7 A0 N! A
0 N/ O. |+ G' O  M; J9 z5 n1 i
cheatlist显示搜索结果* f) f" n/ b5 b9 @' ]& b

* k: L& w$ I/ u# C3 T2 _( N死一命后用cheatnext eq,1搜索生命数1
1 N( P( I  f1 [! W+ l* r0 u: _, V$ [& v' w# f  f  T4 n: N
cheatlist显示搜索结果
: e7 O/ O& s+ z" ~" _.......& [& {$ Q: Y* h
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
: Q8 p5 C  J4 I& S; Q# p5 G- X2 K3 c& D
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
$ K, ]9 a$ Q; ]! h; u/ q
: g' H9 w( h' r& Q  v+ |0 R* h2 u2 C没作弊码的话....
5 W2 [3 w, t, ^
" G# }) R! D' Z$ @% I不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)- ?0 M1 Q- B/ i

! {* S! I  G! B或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)" v* _8 X/ f! A# ]; Y
* u7 O; d9 K$ Q1 l5 b* S* i
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
% ?, f3 u1 Q* S; V+ t& T( ~$ h3 q; @0 R: [6 V0 \8 M6 c# [% E
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
2 F. Q4 s# s2 ^
' x- C+ I6 V! @
回114:
0 s. R; y2 z4 I3 ^; _6 q/ I4 W
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)7 v1 m2 m2 R# |, D) {: p
2.没地址如何查询地址?看上面我给zsyf的回复
* Y/ _  u1 g3 H; h

0 ]( a2 S, F5 U& A2 e打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2917 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-5-10 06:31 , Processed in 1.124023 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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