EMU618社区

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

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

  [复制链接]

签到天数: 2112 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。6 n# @4 ]" t. X, x" }1 i6 K
3 d5 q( b  i: C  Y/ q, v5 J6 P1 C
(1)如何加载ROM% e7 Q- M8 `" H: {4 o( |; v! \' }: Y
, v0 F5 p$ H  @: O% x
先说说如何加载ROM吧
/ K- {& C* W. W) _  N# \
0 v  A, {5 i  v( D1 }1 p以MAME 0.148 DEBUG版为例:
8 N! X! ~+ j$ g& K5 w2 N4 t7 K$ u! w7 ]/ c' T- u. f7 _
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
2 C$ }; v0 |# Q" F
6 ~& w! j. b; ^- G注:MAME官网的MAME是命令行程式,没有GUI。
( N6 H9 [. H% X3 M' J7 r+ w. e
  f' g) t5 a2 m8 `! H2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;/ X- ]# L) c  y. |1 b- S

0 c- ?2 U( G2 D6 i2 M, Z4 O/ g3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:! K% n8 C* u" @+ v

8 S: B% {" P0 H! p5 e# t0 }! Y, t8 Y" Q( ad:回车9 S6 B; p  V5 t  U2 m
6 j( q) P* P8 z: F
cd mame0148b_debug回车# X: N. v( J- A

6 i8 h, Q& D1 x( _5 h' |# {) }如图1:& K" z# I- N0 h, \# [
0 w" n  o! \, B' l/ O* z4 Z  h

& S' B  e# t+ k. K4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
1 v- W) [4 Y. o* O. B- A
% c! C$ V) h) }/ Z
- U0 O+ R5 b3 \$ M2 }  X+ M7 S( Y
# E8 }+ S2 H5 ~) `5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;( {# g$ |6 E2 l

! G! L' N6 N0 r7 A6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。4 |/ J9 H. U* Y& r

+ }! }, ?9 N' M/ X: l(2)如何呼出/隐藏调试窗口
; c: [* n- e& K" T9 ]8 N; e2 I
$ J" S) |$ h" E8 F  M) K' D8 }0 ]1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:$ z4 B( F8 r: Y5 A' w

. E- E% n" C/ N1 N' c9 @4 Q; A, L
- L) A  O6 v. X. B; M( O7 s3 |4 R
0 T. }  C! U6 Y0 B7 @4 t+ j2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
& ~% C/ ]3 V' U# |& B3 R
% _0 c$ u& F$ F0 U# ~. C4 C0 L9 j" J; s$ f

2 a# p0 L6 \. ^3 L3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
, |' h" b; ~; a+ y
. T: K+ T( a+ A( }( {# D(3)如何下读/写内存监视点以及程式地址断点% d4 f; M' @8 l! u8 j

- V1 c6 T! X; H- q先说说如何下读/写内存监视点吧
( v( J" c: h! U+ n
) \9 D1 Q. A2 N监视点命令格式:wp <address>,<length>,<type>,<condition>
6 X' V) W- \; I1 Y( P- J/ ~
# T( E/ C8 F$ }" ]<address>是地址
6 I  @3 Q$ v6 R3 k( p* Q8 ]% T8 Y0 Y: U# T0 R  u4 g4 N; }, k
<length>是数据长度,长度必须用十六进制表示/ `: S6 I6 \6 }
. W% k% n  H! c, a5 _  G
<type>是监视点类型,r是读,w是写,rw是读写
0 ^* x. q1 a% Y' ]6 v; B3 x9 ?; k4 ~8 j
例子:* M2 E& }7 ]' i
  [8 ~- g6 ^- M+ N* S% v
例如对ff8569地址下写监视点,数据长度是1个字节
- a" u; `8 x6 W  {1 l% j9 ]. R1 g2 x  {9 T
wp ff8569,1,w
- M7 J& d4 J: ]( M0 c& W* \4 m
! V9 o: c4 C# e  J! V例如对ff2235地址下读监视点,数据长度是2个字节4 ~, I3 n' t. |
9 i$ T9 ~# A& m- W8 [- G
wp ff2235,2,r
/ E+ d* c" }! n5 `! e( B5 |
% W+ t0 l5 |" f+ I( Q4 y, U例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
- V/ j+ I/ q, h" U
( }$ v$ Q' Z) C2 bwp ff7533,1,w,wpdata == 0: G; A  j6 W& z, N5 s! S% d

( q, |7 v8 l- C以龙王战士日版为例:
7 ?/ \* n  ^7 s( B9 D
0 V8 Z6 S+ j( [6 A: }. ^1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:7 C7 c% f+ A! m
; c% z! y/ e9 v: q- D& d2 ]; j
1 |5 f1 V2 r7 H3 o$ f6 w

" M! F! D( H6 p" U7 d
8 i. z; a0 `- U; O2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
# g+ d) S4 s2 Y& w+ ~6 V8 N( E/ C' o4 S, n- y+ J# m9 h
  A! w4 Q! k& T- v* }- w0 v( E

! s' ^- z% ]# ?4 w. A( r接下来说说程式地址断点  F. B: P% |- Z! w8 {

% C! R4 x( ~, h4 K% i& q' _命令格式:bp <address>
4 U  u1 z5 g& B( i- X
: Y. Y6 s+ I. O2 T4 U: K, ^% f+ F例如对000488汇编指令地址下断点
. f( P6 z6 Z, i9 e$ Y( W3 a! T
" ^0 E( r2 k  D; R8 Lbp 000488
  j+ g. f) p7 G- r2 z# v6 y+ o, }! o2 W+ K
当程式执行到000488地址时就自动中断
" Z9 m: ~7 y& T
1 H8 _; Z. V: S* l, q更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 j" B! h( k7 h# B/ |& v

+ n! g. N: H3 K3 W/ _有错误请指正。* j: \/ i! W8 v6 b% V# [* J

/ ~; S; J: B1 Y) N! c补充一些命令:' G! X+ X2 ^6 v" w/ h

+ t) B/ J) |/ x0 w% J"wpclear" 清除所有监视点. U$ h, u4 K- d& j& m+ n6 `6 x2 D
"wpenabld 数字" 开启监视点. {& I) p- _' E6 ]& c9 T
"wpdisabld 数字" 关闭监视点( g4 c9 @6 K) A/ S% W
"wplist" 显示所有监视点, u# a) v3 S' X9 ~5 q, d* k

& o; K- Q' s' z5 j! s; Q"bpclear" 清除所有断点) y, X" b/ f' x1 y, m
"bpenabld 数字" 开启断点8 S( d* ]% B5 R5 D5 f6 I
"bpdisabld 数字" 关闭断点, t; ^3 T" F, q/ Z; a9 I
"bplist" 显示所有断点% B) r: {0 m9 Y

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3556 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽) n) x" w! F# U9 a
1 I- ]. A# V+ H/ B1 {
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2112 天

[LV.Master]伴坛终老

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

签到天数: 2577 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
, R7 N! f5 o5 k/ v' ]* H, f0 c8 P8 D1 j3 t. D0 Y) k% [
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
! Z  U8 f1 \2 ~6 e; u( c: C4 A
- O' w; }: L2 u" D5 A- ?其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 4 D$ e8 Q; D  Y

0 ~) g$ A- X  x& t- g0 I+ _( WCheatEngine搜到的临时地址当然无法对应MAME的内存地址: u2 Q) M7 e3 X; N0 P  x3 b0 b$ y9 t
3 J6 ]) R  S  y2 J: ^
新版MAME没搜索引擎了么?
0 n- P( Y, n0 Z: x晚上我看看* w# e) H# `$ r& `8 Y7 c2 d

" H0 ]- F; r5 D$ J$ O: V$ uMAME查看地址的功能还是有的4 j4 z5 k; ]- W- N/ A( X
菜单里的第一个选项就是显示内存地址
" a0 _8 D  k- A, g3 J' `( S不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2112 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
( q3 f$ [' k( }
1.DEBUG版MAME有作弊码查找命令' \4 K* Z% R3 X( ^

; v; x1 O5 r( z& h0 Z4 ^- V/ [8 _命令如下:
4 ?* C( H& y+ T9 echeatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
3 _# K; d) k* B$ A& n* G) ?0 j<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
8 w# H5 G7 J. h& ~6 M<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)# j* z' F* S& _7 X( u
<swap>是决定字节是否交换
" G' @8 d, h7 N" P' m1 x<address>是地址,地址必须用十六进制表示,例:0x100248
0 i9 l( L+ l6 W# |<length>是地址长度,长度必须用十六进制表示,例:0xfffff& g, e3 G) [. q/ O8 f. K' b
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
5 t2 ]! K- p$ F! G+ d, f1 ~: Q9 |2 P0 }) [" ?
请打help cheatinit命令获得更加详细说明$ Y2 s$ C& _* v2 ~
- v" G$ E" n1 a& `! y6 @
cheatnext <condition>[,<comparisonvalue>]( |" E3 G: z. B
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]* v  X% s- D4 q" j* D7 {
[eq]是等于
4 r$ K- N' O9 a6 p[ne]是不等于
; A! D" B3 Y1 Q2 U% g[de或-]是减少8 o/ M5 }& c) y* c
[in或+]是增加
! X! V6 @1 \8 i% ~[deeq]是减少或等于. K/ o  v" M7 {4 j% q
[ineq]是增加或等于
0 z% |+ m- Z  o, @[lt]是小于9 E& M5 I* w6 ]0 V
[gt]是大于
' ]1 j0 v. P- l$ H$ I: z[ch或~]是数据有变化/ q6 c2 E! H. O. b& d
; p( s& o+ O! V" ^* T+ q0 A
<comparisonvalue>
$ Z3 L! v( {# U要搜索的数值
, |5 x& J8 m+ B0 K. d# r! i6 @. G% s- D
请打help cheatnext命令获得更加详细说明5 w. A5 R- Q9 L+ L1 @7 J
" B; V  ^/ z9 E7 O
cheatnextf <condition>[,<comparisonvalue>]
; d/ C6 c* @, J; [6 O说明同上
# s: x% q, ]; ^1 e# z
1 I& B& ^3 d' b- W$ ^: S请打help cheatnextf命令获得更加详细说明# G+ q$ o2 t7 E( d

/ j2 P: M  D. o. bcheatlist [<filename>]
, _5 ^2 B* P7 P- p显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
$ {3 j  P4 ~! O# [2 w- L& d' W4 K$ u" d2 v5 {1 o
请打help cheatlist命令获得更加详细说明, n5 X' M- z0 p; O7 ~
1 ]/ e) x/ R% F
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化3 l" n* ]: u8 V4 Q

3 u& {! h4 i3 G1 c3 j) I之后进行第一次数据搜索时要用cheatnextf命令来摸索
, M. r. W7 r4 ?6 y) r- L0 n/ @
* g$ b& _, m9 v( c/ C4 ~8 G到第二次、第N次数据搜索时要用cheatnext命令来搜索( G$ [, q2 t: l* W- [8 `3 `
! y# R1 O, W; x1 M
举个例子吧:
. V1 ?4 G4 N9 `3 x4 U: W8 V' t; D% e% T, r
以合金弹头X为例:" W% n9 E, V  H
1P生命数是2! {9 K1 n5 \) U! b# u. I
$ Z6 J  Q- a) b. |8 e) [) y1 G
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间+ c+ T3 u, ~: E# K. h4 H+ w! H

4 r+ K' M, R4 j, [命令如下:, d5 T" l7 s5 n9 J7 Y/ [
cheatinit ub,0x100000,0xfffff,0
& C  R$ M( e2 \+ Q9 R
+ i, }' z* M& Q$ |再用cheatnextf eq,2命令搜索生命数2# b* q4 }3 \) ?( C" W' I& `& w; x

0 L1 ]2 [/ d. X9 B6 Pcheatlist显示搜索结果4 j- n5 J: Q# u8 s! e" p
* g- p' b' x1 A9 z
死一命后用cheatnext eq,1搜索生命数1& ]# f% C( Z) C; V. _0 L

" F  r5 e# b: \" m2 xcheatlist显示搜索结果. [2 z4 `" u& C8 A6 O
.......
9 R5 u+ |9 `$ M4 S, v直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果  V6 g, T3 F9 P0 x3 J; g' F
- n7 u6 L- q( l! v" R8 Z' n; ]$ d
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
. v9 @- m+ B( \  {
% {2 U4 X3 j+ d- w没作弊码的话....
4 a; R  s6 C$ A$ A! x- U+ Z" o: r: |% P/ p+ D( D5 j
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
* h* q; E  }% T; S- s! ^$ X- Z( d
: T9 R! K% T, l1 a9 a或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)8 F, z  u4 \) o2 C) r
" `% Z  D( q3 O# Y( Y) M
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行  X3 i/ G6 E5 e7 N

! [: j6 T# R$ U: n! O要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

  C, V0 }  b* Z
2 f3 S& A: v4 t- K" O回114:
% T1 J3 T2 k7 i! N* \2 b7 u6 I
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
0 ~7 y0 U7 J+ Q0 Y3 C2.没地址如何查询地址?看上面我给zsyf的回复

" v- g: F$ }0 E; L1 i% G, \- Y. Z; V6 [3 t: I1 P
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3079 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-10-26 15:20 , Processed in 1.090821 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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