EMU618社区

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

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

  [复制链接]

签到天数: 2064 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
  X4 ]. m6 K) X7 P  R3 E. [1 t. C; R+ E3 x/ M+ D  P
(1)如何加载ROM
# _9 Z$ Z9 X+ ~1 N$ F5 X& [& @: p# a6 p* D. J# f
先说说如何加载ROM吧! j1 q: X6 c+ J: }+ Q1 x

- d5 A3 J% f3 o* w, j: P( L以MAME 0.148 DEBUG版为例:4 |  M- r( A% l* X2 _2 Z1 C

3 q; q6 c/ A3 _$ ~5 L1 F1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
- G3 [7 r; B8 K4 b, A7 i
& \5 d1 i8 `* f# U% g注:MAME官网的MAME是命令行程式,没有GUI。( H2 C7 g0 ~& A  Y" F2 s1 {

1 J; d% H: G0 ~, @. d2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
# z1 h5 h- Q% p2 ^3 K' a/ P$ V4 e6 n- X! o1 Z. `7 k1 d
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:1 S) E7 S" Y. e$ b  R& j

1 w7 N2 W8 v1 U4 t3 rd:回车* c, U5 O' c8 Q5 f# y9 W2 Y. ^$ L

1 g/ m$ {) x! a/ B! Acd mame0148b_debug回车
  Y, I: N$ A+ L% V
! [9 R- i2 g" B' O' D2 _' W如图1:
0 K7 C- N$ p% v4 @, o; A# t- n; O( B9 O

8 @* v$ W# y/ z+ l3 P4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:7 f2 c6 Y  V+ c* ^) t' h/ d  N

7 E+ m7 e  p# {) ]2 b, l" L& q4 \: S/ _* u! p4 T" O6 j  ?
6 @( j4 _0 M4 Y" |$ o
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
; `3 A- H! A+ x/ @! u9 Q# N2 p5 |; A, B' b
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。" {! D0 v, d% v& D. V0 y* W8 S
2 Z# W4 Z1 C- g
(2)如何呼出/隐藏调试窗口
6 ]8 Z5 D8 R, T: r0 o( R+ H7 t! N# p8 F9 H6 _
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
( s* `: S1 U4 Q% d! b  i6 N0 D  \+ e
: [3 b9 r5 b4 K# K5 y
2 l* S  D$ q- t! T  e) Q
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:- ?. ^1 |/ _5 c/ ?# L

8 B: ?2 n: @9 {) l
; O* i- B) n* L9 R+ z! a9 H: @! A
  ?0 U5 ^! o3 Q9 x! @7 M  z  E% z5 }3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。2 o0 v7 @/ D' Y' X* |% O

$ f0 j' Z. P! o8 U8 O. g2 Z(3)如何下读/写内存监视点以及程式地址断点
4 E: o6 B, r! D4 M
4 }. S( B8 I+ K6 g* F2 S先说说如何下读/写内存监视点吧$ Z, W5 p2 V* g$ S! n) [) S
9 x% W) b% t- u3 `: u
监视点命令格式:wp <address>,<length>,<type>,<condition>. I+ g8 i2 ^) q5 B- ]
( ~9 u3 M/ o+ W0 B
<address>是地址
. F0 b- }# }# z: `5 G! {% Z- x, Q" z
<length>是数据长度,长度必须用十六进制表示
4 ^4 V) [% N: g; P: r" @" @
  X( I9 N& j) ?5 s" g3 h/ Z<type>是监视点类型,r是读,w是写,rw是读写
$ s1 j; ]) M( g. @! F: m6 c4 i
* E- @+ ]2 x, N, j& F3 ?例子:* s$ O2 |" r8 l0 y
- j0 s' M( D# _8 r/ y
例如对ff8569地址下写监视点,数据长度是1个字节% H8 c! c$ p' \, `3 x5 b, x& n' p  D9 @

# z: [/ {3 f& _8 l, x0 M* X: wwp ff8569,1,w# a5 U* C0 a- z
' ~& F3 ?7 C: x
例如对ff2235地址下读监视点,数据长度是2个字节
3 e* V( D1 k) O) [4 I7 J8 x: x, _' d" ]) ~  n7 S& ?
wp ff2235,2,r) ?+ H; \! o+ H1 w/ p" b
- C0 j$ c$ B; f9 r  B+ c
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
& D: H  R& q$ q4 j) {/ S) e
- b& C! M. V3 gwp ff7533,1,w,wpdata == 01 M7 v+ W* a6 G3 z

+ r; A$ g+ b3 Q& b% S5 D以龙王战士日版为例:) Q3 u4 k6 G- V
' U6 l! V# l4 o& ]7 I% ?
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:2 {/ ?, Q1 K  V6 K7 S2 Z- p
9 w1 T3 r' `. l, }6 A4 C5 d
/ \( F' j0 p3 a# Q/ V" z
/ s: ?4 S& K* w" l, @
( P1 _( b4 ]$ m* r! W0 k; s2 d
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:9 v1 r- \" x! }6 O8 C! W$ H; I. G8 O8 G
* F# F- M9 j; @
+ i6 M. S7 b+ [0 w3 d1 \6 G
/ V' l7 G7 V: q9 G1 }  |
接下来说说程式地址断点# x. A5 Y  r2 {" }* F
2 n0 L% S( m/ \  k9 _6 k
命令格式:bp <address>0 m" a, H: R$ K. V* @

; i  O4 d3 j. |. L4 m- b例如对000488汇编指令地址下断点3 N9 T7 b& K7 P/ z) U9 i
9 U1 m5 {- ^( r4 L- u
bp 0004885 ?/ V% c; L3 }' U
5 [* d2 Z% z" p6 H# g
当程式执行到000488地址时就自动中断
8 N+ i+ a. D  m& i8 T6 W' z, ?  T$ h: p4 q  y* z" @
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看4 {% U8 H1 _8 v
9 E& p- \% y& x' ~8 b; b
有错误请指正。6 }4 E; j6 A: P; E" i1 |: r, d5 B
- Z7 u2 G/ B2 e
补充一些命令:
) ~7 U6 H( K2 G8 ?( _
- h1 w% c8 q: j; J& x+ ^"wpclear" 清除所有监视点
3 M" g6 k* J' L% l; i"wpenabld 数字" 开启监视点
' ^. e  ]5 ~$ A. q9 x% a# A"wpdisabld 数字" 关闭监视点
" }/ q% _+ ?5 w$ t7 v/ l/ n* e8 F"wplist" 显示所有监视点
3 i. ^  J. e7 |4 M) K5 i5 C" y; u6 s! M$ {' s; K5 I
"bpclear" 清除所有断点* @4 `# F& L+ d1 A% K7 Y, y  X* P
"bpenabld 数字" 开启断点
: a3 [' A* k8 x! n0 \: x% `! j"bpdisabld 数字" 关闭断点
) o+ e: H' Q7 g  M; ?2 s"bplist" 显示所有断点" e; o9 s+ l, [: H( K& C  u8 t

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3508 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽' ]' A: r3 t9 b
+ G% k; ]; ~4 }+ b! t% o0 z
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2064 天

[LV.Master]伴坛终老

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

签到天数: 2571 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 # A6 x! l, q8 l% q* o
; W0 G" L& }: {( r# j
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。8 I* m% w5 c$ x  D6 J% p" B! P  ~
2 D& T# H( m' M7 q- T# @
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 " n7 v9 j  X1 H0 @
: y( |' o8 O# e; X
CheatEngine搜到的临时地址当然无法对应MAME的内存地址% R8 {% i+ N4 D) f

) K7 A; [' T) k" v新版MAME没搜索引擎了么?# _! Q+ l5 A- c1 N1 l; w! |
晚上我看看- g; U, |9 r" P$ t/ _1 T

7 X  u7 @: S% U9 B2 W6 ^% |MAME查看地址的功能还是有的0 b' {$ U4 M9 R5 H* T
菜单里的第一个选项就是显示内存地址) P- k8 |$ X' E  Q
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2064 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:" ~' A; n4 M  ^, c% v
1.DEBUG版MAME有作弊码查找命令
* _& X& }! l* K7 e' K# q: w) M3 r: @1 Z% [
命令如下:/ Z7 Y) w- A# V6 X8 ~1 w
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
% Q7 D2 G2 @0 u" X& a4 i5 t<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
" k$ ^( H* V6 G% G+ _' S<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
1 X, ^. `( Q  T% u, o# U" m<swap>是决定字节是否交换0 h) T4 d0 j: K7 g7 L
<address>是地址,地址必须用十六进制表示,例:0x100248
5 K- P% U( a6 l- F<length>是地址长度,长度必须用十六进制表示,例:0xfffff) H8 z& g: V, t
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU; a' G( i$ O$ U! a2 F& j
5 G) O5 X1 E" r8 @8 O
请打help cheatinit命令获得更加详细说明, V+ b  @" g% A. R! j7 r, V) |0 e- b! [
: {, E) M) Q' T: `3 ?: ~
cheatnext <condition>[,<comparisonvalue>]
6 G! Z$ H. l/ \; x' R5 D' x% ]<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
9 K- S4 g0 f7 V$ E. Q5 b[eq]是等于
: y& \: z* F9 ^[ne]是不等于
) B2 A/ r0 W; p% _5 _[de或-]是减少
- h" \5 j& V2 F[in或+]是增加
3 H0 o# T/ `8 |/ O3 ^& O9 h[deeq]是减少或等于$ Y* |' ~$ n0 p0 Y
[ineq]是增加或等于
( L. t6 i/ O% C( j' F) t[lt]是小于
8 L2 h9 M. U. B- ~6 r[gt]是大于9 f/ L" v( [3 T0 L
[ch或~]是数据有变化7 \, X+ l$ @9 ?2 X5 Q1 `

. x: u: G+ Q8 p8 l) s<comparisonvalue>
+ d4 G5 W1 q$ g4 A7 K! J要搜索的数值% q3 \4 F% Y( ^& T) s

$ q) Q* I  O# I9 E4 a: z) ]6 |请打help cheatnext命令获得更加详细说明
  w( d' Q8 |3 R8 @, G8 B
+ Q" T3 p2 u0 Q+ gcheatnextf <condition>[,<comparisonvalue>]3 ]( n  x2 j0 o; \1 L, N, {2 C$ J
说明同上
* f9 \! e; e; w; s9 [
" G  J$ B' r6 s/ Y请打help cheatnextf命令获得更加详细说明' v/ V! H& {9 Z

) j  s* Z% N, R4 Y5 R* Vcheatlist [<filename>]- f7 h( k( K# x0 Y/ O. r* p
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
9 S& X  L1 w2 h: l# P% J- g6 n8 ~0 o* D) }! g8 r/ H' {4 y/ \& T+ C8 j
请打help cheatlist命令获得更加详细说明
1 w" H8 w4 `9 a  y# q+ i' v% J5 F
8 @+ h; H; q) m- p第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化9 J+ e0 Y% p2 S5 j9 {  _* l$ A
& w. X# e4 n1 ^% N& i
之后进行第一次数据搜索时要用cheatnextf命令来摸索
, Y1 m4 i. l% K( m& V! h) p" b& K, B6 ^% F% u" w
到第二次、第N次数据搜索时要用cheatnext命令来搜索, h+ a, g. G# ?; V( z/ ^; R  x
: g, y: M$ K- N4 U" C! Z8 A  n* D
举个例子吧:& K/ J# ~+ u+ C: o$ ~7 ]

/ W! P9 C! H$ r; S, b以合金弹头X为例:
$ Y0 |# F: K; E0 j+ A1P生命数是2
7 h4 q( R  G7 K# u. C
) }! z0 i' s2 q! W先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间1 @# S1 Y6 ^! c; y( ?" N
& t) I1 u9 D/ p: b. Q+ O; H
命令如下:( K' j9 U5 a# `7 o! {; `! s
cheatinit ub,0x100000,0xfffff,0$ ]. F1 x" P/ l) v& F
7 }4 x: y; N- W+ k
再用cheatnextf eq,2命令搜索生命数2
- C3 e' O0 i) u; D0 {& U" C/ U
" U( Y7 @) U" f+ p3 Ucheatlist显示搜索结果
5 H3 y8 E# w7 y9 d0 B+ B4 T" r, C- \0 n
死一命后用cheatnext eq,1搜索生命数1
0 Z+ N1 D6 k9 @' G
1 w/ r4 p7 p- i9 m7 h5 F  Lcheatlist显示搜索结果- H1 A4 s3 n+ V- P5 k
.......0 B2 b( @+ d+ B/ R  G
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果+ z2 e# n% r- N* X- y# o- t
- U7 z7 a) G- n- N! R8 H( s
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
' C* @# i7 K% ]+ S9 v7 L# A) B* d: x" X( S/ n' x$ @7 ]4 i" H! |
没作弊码的话....
5 E; S/ T& m1 h3 M0 O9 C  C! p; {, J
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)& |/ a% N* h1 |# _
& w( b) p. T, M1 ^6 `2 Z
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)# G9 g; b& E* B
) ^! I  _6 l* ]* V+ ], k! g
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行/ m+ K' O8 S# O1 y9 A0 R- a  [; x
" Q' j: \( Z, K. g; k! a3 y
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
& ^' e6 _% A0 R4 ?; x/ s0 c
" d8 v9 d5 s8 P0 d4 U, F: v) K
回114:
, e2 f* m1 B3 |- \1 E. @
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
. H, R- F  m& P6 Q& E2.没地址如何查询地址?看上面我给zsyf的回复
: s' S  c9 g: {( p5 z( ~
- }) [6 k  O$ K" u  R+ i" _
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3035 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-8 13:35 , Processed in 1.084961 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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