EMU618社区

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

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

  [复制链接]

签到天数: 1997 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
! T; s9 f( E' j0 Z/ U$ T, K6 n2 m  n! ?  F
(1)如何加载ROM
4 t" `4 K% Q# Y# ~6 U/ Q% i7 W  T0 Q# `1 \
先说说如何加载ROM吧
- ?! ~0 O* a) n6 R9 F
2 u& Q7 W2 Q, g% E; b2 P' D: W7 s以MAME 0.148 DEBUG版为例:
' z) T% p8 X, Q1 E$ F' j( j2 M/ }+ o* B7 y; t& R' C, K
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html  V; P; D: H2 r2 T
5 v; w. Q% D5 v. _5 G. Z7 ^
注:MAME官网的MAME是命令行程式,没有GUI。7 T) [  i$ F8 \4 }# o* o/ e
! U- Y/ N5 h+ J, i, k$ f
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;6 z+ V  a% A! q. g# d8 O# R
7 _1 Z+ Q# I* E8 E; ?/ H
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
* Q$ c1 C6 ]' a. ^, m. f
2 Z! j' W1 ^# U5 Kd:回车
0 X! T4 M- W" I7 i! G9 ~9 v- P, z# T' Q) i
cd mame0148b_debug回车
. `( `; z& R% @5 s' ^  q: ~" D' D: U. Q$ g+ @  J# c( c  n
如图1:9 m( V, G+ g2 G, {: Z

2 [+ [! _" O2 ^( j3 L  X$ ?, s5 }: w0 Z, g; G0 v) f3 v$ I
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
! b1 }; `: ]* @: Z4 |3 j, B& s
8 n3 ?' Y+ C! K( I9 _7 Q" R! p3 V; [/ d3 F! Z! C; q

% S" m9 X, K# n5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;: X5 X# ^4 T0 S

# z+ v' L" y/ a0 k6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。+ [8 g2 Q1 j+ M  b2 Y  D
+ X- v" n5 O% F( K9 Q/ C
(2)如何呼出/隐藏调试窗口2 z0 F8 c' e( l, O# A; o
/ K4 w+ ?4 G* z+ P
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
! W0 z2 O2 p' V
7 z2 r- w- f8 ]" n2 _
" y' a! s& [7 @# C/ K
0 C! N6 \: S9 y) _7 L' s! s2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
8 ^1 J7 B8 g  `  c8 H* Z4 p4 d! t, \# s& {. ]6 F

* ]; Q. Q3 d9 k4 K/ v( P+ i6 X1 T4 A5 i# I3 {
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
4 R8 U4 q  I& z0 U  x8 J
. j7 K, k+ W1 K; p(3)如何下读/写内存监视点以及程式地址断点" B9 f; U# N+ {7 ?/ n% }8 I

* T2 s+ c6 c# K% u% Z& {# Q$ k先说说如何下读/写内存监视点吧3 `4 l+ P" R$ _5 [) w

* Z) b4 a3 \, z6 z. L: p- v# c监视点命令格式:wp <address>,<length>,<type>,<condition>
% N3 M. h2 ~3 D: ]  W9 o. y/ E! ]9 V" y0 [; b
<address>是地址
8 G" ~: s1 p0 ?
9 Y' j: c) n2 j6 Q<length>是数据长度,长度必须用十六进制表示
7 h3 x  y, j* V7 Y
, Z- A% d8 {# f<type>是监视点类型,r是读,w是写,rw是读写
, L# {0 K, v: Y8 w
' \; Z5 j9 M4 y& w例子:
& f/ `! ~: d, Q. r5 n0 g: q6 N% |3 W- ]0 v9 G# D
例如对ff8569地址下写监视点,数据长度是1个字节' B  g6 Y! e+ e8 L

8 L* ?8 [1 r( x* e" q. Zwp ff8569,1,w( q' @" B0 T, N( h0 A- r5 z: v

; `7 k0 I1 K6 i5 e" a例如对ff2235地址下读监视点,数据长度是2个字节4 M# S& G. a; i6 S0 P  `# X
7 N/ f0 Z8 _$ ~3 e8 K" e
wp ff2235,2,r5 E1 |# x7 a0 [

9 r, }' a/ K& D3 O- L4 k例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断0 X" G# r) k  r" `. h4 k
' @: Q% ~% x3 D& F! c+ W
wp ff7533,1,w,wpdata == 0
( X! r% ^9 x) T
, d. B+ ^8 c" X) G' N( `以龙王战士日版为例:
& X1 g% `7 M8 X7 t' u! @; v& s; v- @9 U3 k
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:, M  E( A$ z6 Z( g

& Q7 _8 s; v+ z# X% E" g1 h6 }( O! a2 o: E! X* \

$ t$ ~( o5 n( L! h3 V# `
( ?) j; P6 w3 \' D% o8 U2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
' x% J: k1 h7 i; ~0 F. b! `7 f! q+ M8 ]9 A' P/ w+ P) N! C
6 n& b( {! F7 X+ N  l' {9 N( h

7 q0 E( _0 h) }8 q$ |' Y接下来说说程式地址断点
( w5 s6 w! k$ X+ ~* m0 z$ \  K, i, B
命令格式:bp <address>, o  k% D) g" O1 h

  _- g) F6 q7 x1 i; @1 ?例如对000488汇编指令地址下断点* Z+ I  B. J8 `+ a2 ?* b: ]* l
/ ^4 V; L- }+ u% ~  C# ?
bp 000488- A0 ~1 C4 G# d; w
$ T( L9 Z7 Z; S" j5 B
当程式执行到000488地址时就自动中断
8 o$ R- |/ L7 Y# Y& W
" n6 m% m2 K/ O$ K$ q" ]更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
8 ?9 j- G7 l4 r( _7 ]/ l/ x
( D: ?& Q7 z) s# e& I- V9 b* m有错误请指正。
1 d* K- s" R2 q$ c% l  U0 v/ O+ C! V/ |7 h- l; i
补充一些命令:) S7 c' J0 l, b' p. {: Q2 L5 ^' ?) t9 U
5 r- N9 y$ r, B8 ]7 H! ^* t" }/ `' u8 L
"wpclear" 清除所有监视点& \4 a% `0 G; C" e8 ~. C
"wpenabld 数字" 开启监视点
& T9 r  Y# s( d# l$ {  [; ^"wpdisabld 数字" 关闭监视点5 L5 ^+ P1 B$ K7 z0 j$ G8 Z8 ^5 e
"wplist" 显示所有监视点3 q: V( m  s+ }

/ ]' d+ H$ e. |"bpclear" 清除所有断点
5 w8 ~# @( C. w"bpenabld 数字" 开启断点- o$ P$ P3 P) \6 |$ A; n
"bpdisabld 数字" 关闭断点
. [* M) W% M9 U! L"bplist" 显示所有断点9 U( x  ]* L# y8 z' G/ m0 B- H

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3442 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
+ t0 N5 y' h  \9 V6 @" K: }$ a3 e) H/ o
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 1997 天

[LV.Master]伴坛终老

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

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 ; s* Y9 T. I; M/ Y, @
7 p, y4 n1 ~! `1 }& h; {; F: a
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。" H9 J  L% s5 B. j3 U
& U+ t$ ?4 h6 h( r3 y: X. E
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
9 I/ Z0 T9 G  ]/ a/ ~' w7 j  r+ B: O' L5 D
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
4 ^& L' ]% P2 y, D. j* y. S: X- N' |6 r
新版MAME没搜索引擎了么?
+ o. N* a: ^1 y9 E晚上我看看
4 V1 J! G9 r% ]2 a! ?
7 M* W; h/ w2 L  ~& S; q+ mMAME查看地址的功能还是有的( i! s: N( e1 D# S
菜单里的第一个选项就是显示内存地址
7 D8 F! {7 |8 U# x- G不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1997 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
* i7 ^. q6 q3 D. g1 \6 c
1.DEBUG版MAME有作弊码查找命令
) v" w( a. ~& q
( t/ N$ i5 x1 J命令如下:
% G0 K- C* R- Dcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]  w: f+ o/ j7 }% F1 n' Y% s
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型5 f7 [  S; B& E$ u) O3 [
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)1 K! I* H# K! N; m. ^! w, W
<swap>是决定字节是否交换
& u: w6 O2 O' y9 N$ x; o, N# ^2 \<address>是地址,地址必须用十六进制表示,例:0x100248+ O9 `& t! F5 I! l, r3 h
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
% K( Z' z: w* t( \+ ?5 m<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
- |! ^6 g" ^( z4 y
" F. b! T; W7 T/ _7 M- ^8 a: o- R% [请打help cheatinit命令获得更加详细说明7 P, i' Z+ f' N6 F7 T# t

, `9 S8 m+ h* T# I) bcheatnext <condition>[,<comparisonvalue>]
( }* H# E6 M- d8 F( K! `<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]0 z  ?2 @! F2 j! b4 R
[eq]是等于
5 I) Y0 U. q' `0 K/ v! B0 H9 ?[ne]是不等于
( i4 p2 \8 H! q6 n( A5 U" J  f% R$ ][de或-]是减少/ Q. X- O4 k% w3 ~0 P6 g
[in或+]是增加
0 F& A0 }$ F2 Q[deeq]是减少或等于$ C  V5 T1 b+ }' g  `
[ineq]是增加或等于
! C8 J) t# C# M$ r0 \* n. ][lt]是小于
# [. v. B4 S* K/ ]2 I) _' L/ y[gt]是大于& r( d6 N. B& R+ y5 ^; `1 U. L/ Z
[ch或~]是数据有变化
9 K# E: Q: x9 G  d( [- a9 n8 U: {4 d# u2 O) e: I
<comparisonvalue>; u0 \0 Y. [& y2 u
要搜索的数值
  f( H( {6 [  R: a) Z+ [7 y% d, c) a
请打help cheatnext命令获得更加详细说明
! a' F3 `. p( r* }. D
7 T+ \6 _7 s+ o, M9 K0 _1 scheatnextf <condition>[,<comparisonvalue>]2 x. c( E, p8 G8 m2 z1 _. J) M
说明同上5 U0 Q* \3 j; E  a% @5 x

8 R/ t# H, y( d4 c2 k( b请打help cheatnextf命令获得更加详细说明
9 Q  Z1 E& Y" i3 m1 ?2 {- x; J4 }# ~% r' }3 r
cheatlist [<filename>]
  `1 a; O5 f' s6 x! E6 }显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
7 i# c# o+ E  y6 J! K9 F
/ v! t, B" |* L0 O% o请打help cheatlist命令获得更加详细说明
+ H/ n+ V) M4 ]/ `. e% a9 ~+ j& q) h
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
, v& s$ o: F0 \: s6 W3 E9 K. D* G3 T. [! ?6 w/ j
之后进行第一次数据搜索时要用cheatnextf命令来摸索* Z; b8 @5 e4 E! s

8 v* s4 _& a( T) [( w2 q2 J  Y到第二次、第N次数据搜索时要用cheatnext命令来搜索
! F2 j7 H3 W4 A; T0 H) ~
, W+ H* |, l6 l1 x# @9 W% H) f& p2 X8 p举个例子吧:: ~5 U; P6 w0 ?  S" S$ N; Y& u0 u$ J* f) \

; l3 L' y% B9 C以合金弹头X为例:
5 }) d; N) ?/ a* D+ F1P生命数是2
) k; K* E; J8 J' V! ]0 I" P' O  Q- ]) g
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间4 e9 B' b+ u  D) _4 A$ W2 f0 z
* u3 x% N6 x* P6 v; X, f% t% g/ g
命令如下:# {; r* z% d3 I  f" @
cheatinit ub,0x100000,0xfffff,0
/ x5 x  P, t7 J$ t0 ]6 B  Q4 o- ]; M3 F: w& k
再用cheatnextf eq,2命令搜索生命数2# c. A9 s3 ]1 j8 C! m* Y# I
$ @0 \$ c: h9 x, R  ^8 W1 m: C& h
cheatlist显示搜索结果
) G1 Q' ~7 C' {
& ?( S% L3 q; k" b" y" g+ M7 u) c死一命后用cheatnext eq,1搜索生命数1
" ]( s# h- @/ |  I1 D3 d9 D+ S7 Y! O' P& ?6 S( o9 S) y
cheatlist显示搜索结果
$ ^( S7 ~4 O9 z- k- M+ V.......1 \5 A, O: k+ V5 ^8 m' Z: X
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果6 C2 s" d5 c# K+ ?& R6 o
/ {& ]" g7 t% F' f2 g# n5 ?: Z
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
9 {' }; w% U5 m1 X
' c/ A! m; v' Y& s没作弊码的话....
, K5 |% k# G4 l. }" x. F: J  ?  l
- Z$ m' r+ I: C& I# N0 ^不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
1 o/ ]  f, R" Y0 g8 P
9 O( m9 O3 I% a; C  \! C$ a或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)5 B8 u; W& _/ w
' _; f$ v7 N8 z  d; R* `
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行8 D& o/ b' ~3 o( z$ U" f' L

9 f) X' q& X, U8 X# V要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

( n% X* }  j$ A4 ?2 b) M. K1 l
; L  U. M* M' c& h6 |2 c回114:
9 l* c, t# O8 E% I' ], c
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
+ J' Y' I4 b" t0 T, f2.没地址如何查询地址?看上面我给zsyf的回复

, B( j! N- l; M; C* @# @: a! D$ n* l& G
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 2971 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-7-4 12:01 , Processed in 1.094726 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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