EMU618社区

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

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

  [复制链接]

签到天数: 2154 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。' G& W- v5 h  ?0 P" y* m+ x
8 y! m' n* C. a' e- e5 d, G' @7 U
(1)如何加载ROM
. D5 K. b9 N+ l$ b& p! k. O: ~7 \) @" ^
先说说如何加载ROM吧, _) T. \8 J# d- |
4 L. Y# f" Q% I5 P) W$ |/ J
以MAME 0.148 DEBUG版为例:
8 O5 p6 \) R' i
3 a( ^' ~% C" }) r" P7 A1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html$ N7 k) F  [  T6 N' X0 R
7 B& E% t# R  ]8 ?5 }& }, [! z
注:MAME官网的MAME是命令行程式,没有GUI。/ l" g% ]4 r9 E: K; i
5 U8 e) T. u% ~$ @' t
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;1 w9 S5 Y/ }) e0 c/ s- ~$ d* z
8 M7 O* J" g; D, g0 D* n
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
9 O) [) A( v+ c2 U/ N6 m5 F( P, e& o% }
d:回车
6 r, r# X; L3 ]5 i% V; [) g" A; Z. A
cd mame0148b_debug回车
( h8 X/ y9 |6 p, I1 c0 q0 ~+ J, h
5 t2 i$ ]# Z8 J如图1:* X$ B3 _) H! E4 Z7 [, p9 a
3 D$ F: K4 A. U/ h
3 |) C) Z) y: o7 K" t" U
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
$ G+ h9 v1 R( Q6 v$ q5 `1 g
7 o" Y6 m0 `( Q. }! K
5 n$ [6 G: q- h( S- ~- O3 p6 H9 [+ Y- i2 w" b
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
6 ?7 V: a5 |4 U3 Y3 u% p5 O
, a5 s/ W0 G0 s6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
& A& N) D) ?, h  ^2 J) D' R7 C8 R2 t5 f7 v, r; F
(2)如何呼出/隐藏调试窗口
4 e" u4 H- d+ S$ ~8 q0 r1 g( S7 P- U3 H
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
, c5 c  g( j" a$ _
4 ~. p+ Y+ U) w& m9 k  F7 U; X% X) o; f! v* s, w
3 ~! q* v" L( e
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
, E' w/ j9 ?2 F
/ [! K8 i) H- I' h4 `8 r  ]7 {5 z2 a! g

# z3 n9 X1 l& a, H3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
6 ]! ?2 X# R# `/ M' |% l1 [; z7 `; P
(3)如何下读/写内存监视点以及程式地址断点
! i# x" @# e; k, _, o) b/ X) l! P
先说说如何下读/写内存监视点吧
3 Q& F9 |& ?* f; q. r, \' M% s0 v9 L( D6 C, y
监视点命令格式:wp <address>,<length>,<type>,<condition>% _2 ?5 i* o7 y7 d3 j, _
! m1 U/ m+ Y; b1 y
<address>是地址
' L9 T! I% X$ T" a$ ?
. |, J1 m( h: j8 k9 M3 H<length>是数据长度,长度必须用十六进制表示
4 U  r( l  G9 F" T2 T
9 ^: Z7 z9 Q' L/ M9 v<type>是监视点类型,r是读,w是写,rw是读写7 c9 N  C1 R. p; ~4 P

3 l2 f! J6 D/ n& R6 t: i例子:
+ _" E6 d8 V. q, s; Z6 E
0 J/ b4 n& \7 ~% w* J7 E例如对ff8569地址下写监视点,数据长度是1个字节
, t$ v1 q4 r5 U& w! V9 s3 L, B( w+ f# s$ G/ w' e2 S
wp ff8569,1,w" V2 j; a0 y# b# w, {+ x4 n

6 b# H. Q7 U% f( M( ]$ P9 u; b例如对ff2235地址下读监视点,数据长度是2个字节. T6 g  I) r- h: A; Z

% p3 K+ h- ~0 C. d* {wp ff2235,2,r
4 Z1 U( c# V& r" Y! H! \# a# e( v4 \7 {# S7 ?* R8 y
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
# n: h2 Y, b- D5 p5 o1 i
# Q0 \6 K4 G) R. v5 lwp ff7533,1,w,wpdata == 09 ^) r7 n+ p6 t. Q4 \8 r
7 O' n/ E9 m5 ^0 K0 T
以龙王战士日版为例:
5 `' A4 C7 c1 L; S( v. W! k% O7 W9 B2 \/ c& U+ f7 z
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:: V! O, |$ q- S1 }: A6 E8 A7 A
2 C. ?9 W8 v& Y' y9 Z* x

) t4 C0 E* q+ d
% k5 q* B& U9 h
; r) d  g9 K) u! r& V: K0 P: C2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:5 q; Z) ^* U+ O( {; K
  T* C2 M3 m: d6 }# u' V
( V$ ]+ \) U8 G5 A+ Z, s$ A7 e

# o7 V+ C9 D5 m$ k( `接下来说说程式地址断点
( q$ s# p3 p4 W4 O+ n/ _6 H# a1 I2 E
命令格式:bp <address>  l) O; M- L6 D$ h) v" U$ Y+ p

0 `& u$ Z% }& D! m  \. x例如对000488汇编指令地址下断点
. ?6 U: x7 _, L0 X# J. E8 O% l, n2 \
bp 000488
, L% Q0 ?( b2 G/ T
5 v7 W5 o% m& s9 _+ [* e, g' J当程式执行到000488地址时就自动中断- k( W& U* t: }) v  E8 G
' n) e- Z! I- M, s! F
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看6 j! k9 D7 `; z5 b0 ^

% m9 [1 C5 l7 f: o有错误请指正。
* _& t2 }8 K' U- o( B5 W3 m% {2 {+ c! N  i
补充一些命令:
  B3 p7 b7 G% v* S
4 F( c0 H3 }- q5 ^$ l: g& N: Z; _"wpclear" 清除所有监视点( m) U7 r2 t- V6 D. ?# _
"wpenabld 数字" 开启监视点- {7 m( n& F. D* V8 c; N; a
"wpdisabld 数字" 关闭监视点. Z- r. \- `$ R8 F3 e9 L
"wplist" 显示所有监视点
8 H  `) d' E" X8 q$ L. o7 d/ H) S5 @9 m( i: F
"bpclear" 清除所有断点( t4 ]' v, M% w- N" `% ]2 b
"bpenabld 数字" 开启断点/ R8 s4 o: y! G+ }0 N
"bpdisabld 数字" 关闭断点
. N0 h2 Z- r* R, _"bplist" 显示所有断点1 C5 n/ r1 f! R! l

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3598 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
0 X, f# v1 L4 {: y  }  [
1 ]6 ^* }1 ~" G! f以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2154 天

[LV.Master]伴坛终老

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

签到天数: 2583 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 , w. g9 i7 Y8 e; |- X
6 |$ t* L* D  K$ S* I8 ?
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。; M7 O$ S* G) R5 Y( H) \/ @+ }
, N% C' I0 q2 ^: i/ i+ A
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
+ q2 P( T! [/ G: f( d& ~7 r9 W' ?
: B# V  w% ~+ Y' C# K7 CCheatEngine搜到的临时地址当然无法对应MAME的内存地址  r( O; ?+ T* V' n" p) q
! ~5 L6 [- N' s, ]  i$ w5 m
新版MAME没搜索引擎了么?
& ~4 b% [( z3 {( j& }3 T& C晚上我看看) d* I9 u- s  Q: f6 L5 `! B9 a
, z' b: }# h( L7 m- D
MAME查看地址的功能还是有的( \* \, C6 y6 Y- s' H
菜单里的第一个选项就是显示内存地址
6 J) u+ F0 x( e; `+ Z# y- a不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2154 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:0 i" A+ W$ x/ a
1.DEBUG版MAME有作弊码查找命令
- A+ U2 M7 Z2 C4 J  S
4 e' |9 [! O& Y7 p6 d: s命令如下:/ L, X7 `. Q' g0 E8 Q
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
+ }0 B( J+ I4 a1 E3 A4 j<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型/ H( Y. b! i& ~* ~5 e. [
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
3 A. n& F( `+ W0 K7 a. S% {<swap>是决定字节是否交换
5 p, y3 k+ P' g% _$ x9 `$ J+ ]4 |<address>是地址,地址必须用十六进制表示,例:0x100248* C/ F- @' D' Q
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
8 k/ f' m  x! e6 x# p, b<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
% k7 ?3 v1 g; }
8 Y8 q9 ?% w: ^1 \7 Z+ l  g请打help cheatinit命令获得更加详细说明$ F# i7 o) x( r  V9 q( h

1 X& P  V* a; t, r0 K9 w9 jcheatnext <condition>[,<comparisonvalue>]- `& H  n' b% ]1 K( l! |8 L
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]$ K* z; ?& Z. S& Y1 S# x
[eq]是等于+ M8 t; a# G* q* c& d
[ne]是不等于" I; T0 S/ m0 [& X; L
[de或-]是减少
7 Y3 T* n# T9 h% O+ ~0 B[in或+]是增加- Q9 `/ O  K. V; `
[deeq]是减少或等于
. @) _4 H! P2 M. ?" q[ineq]是增加或等于9 D' R4 X  n; m" W. c- A
[lt]是小于; U8 t) W% h3 u5 }" \2 a9 |6 C
[gt]是大于% D( H5 k2 W5 |/ v) \& p1 t& k
[ch或~]是数据有变化
, b  q! w. ]+ p9 k
! ?# ?7 h+ v  a% L9 ^0 T5 d" }- ]<comparisonvalue>
3 h, R* d8 }0 l9 j  V" [3 U要搜索的数值7 ~8 T* R* E5 b+ y

. P4 H# T0 `8 y/ x2 z  G3 l1 x请打help cheatnext命令获得更加详细说明; S1 g% w! k, Y

4 s; ~; |9 r5 U9 l. {cheatnextf <condition>[,<comparisonvalue>]4 M0 F; V) B7 r+ B+ q1 q4 X
说明同上$ B' c& Q0 J+ j/ O! ?
3 ^% \+ i6 p* o6 }0 k! `
请打help cheatnextf命令获得更加详细说明  F& A7 t% h- N. L, g9 x' }7 S: O: @
1 V" ?( u6 Y2 U! a. f' z, w
cheatlist [<filename>]
; K' P9 z; ]5 u! S% M显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件* M4 g: C8 t/ S9 a5 P

+ |' b- u2 n. \! V请打help cheatlist命令获得更加详细说明( a+ x, L5 z8 D+ m9 I" }5 U4 N

: Y6 E( O5 S1 g0 X第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化( A1 j) |1 T- w3 l- b# z( E
* O( W. N0 Z5 Y  T: E/ r" R: I$ [+ N% B; Z
之后进行第一次数据搜索时要用cheatnextf命令来摸索
6 h0 {1 Z: U) v3 j0 c# O( M" p' ~# K7 B" N3 e9 F$ S( D$ V
到第二次、第N次数据搜索时要用cheatnext命令来搜索
9 o) g+ Z) e& k: P# X- p
& w) q9 X8 @+ B8 P) g" T2 o举个例子吧:' D  f' o- m* n2 h% p7 v( C  R3 f

& K& n; Q' c" Q& ~6 z8 U0 G以合金弹头X为例:0 U+ O1 p! q6 R+ z' _' z- `
1P生命数是2
9 `9 y8 `3 p8 D5 ?& s% \  u' p$ q" l! ]" G" z/ D% B
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
( H7 M" ^1 U" A8 }/ s! G( x7 @9 p3 P- e
命令如下:
9 P" J3 n) j3 B# h, a6 \cheatinit ub,0x100000,0xfffff,0- L6 C9 x  Z  x! }. U  \! G
% [! `$ `7 j: d9 ]8 h0 m
再用cheatnextf eq,2命令搜索生命数2, P0 r+ h7 o5 C: y

" f9 H* ]5 `5 x3 \/ w( O# @9 S$ Wcheatlist显示搜索结果2 ~- [5 o! k1 ^' W5 x1 E

6 H) C/ w/ f& u3 ~死一命后用cheatnext eq,1搜索生命数1  Y1 S# A. d1 U$ \) {9 H

! k. t3 s" L# ~  [( B, a, q) Ncheatlist显示搜索结果
& y1 ?  x; N! n" y) I9 M.......
& w. _7 B# U; i+ r0 {* M2 M  z: k+ \  M直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果) C( [9 }5 _  u. d# O

! ]6 S' }2 |3 p! B8 G  Y- j还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。7 B$ g: ?) W2 Y5 l; q! h

5 `  F8 n2 L4 e没作弊码的话....7 ?& G+ n# o3 }
& k) u2 N; p* O
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)# H* x; H" w% K# @$ T) w5 W
: w' [( ?' u5 W4 u4 i
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
1 m* P" ~( o5 ~9 ?9 @/ p- h& S" ], p' }; ?
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
3 ?# C3 x+ r6 L% w3 Z
# ~$ c" j3 w7 E6 S! e1 r要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

# w" L  K1 K  Q# M
6 {  s8 r7 X, [. ]3 c回114:
6 [% t  i  b8 Q7 Y# g8 z
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
4 j: T( e: o9 D9 ~- p1 I( ^2.没地址如何查询地址?看上面我给zsyf的回复
, p  A2 b# w4 I) U. F4 _* a0 L& r
* {$ d9 N0 Y  L
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3119 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-8 03:53 , Processed in 1.096680 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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