EMU618社区

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

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

  [复制链接]

签到天数: 2091 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
% H* D: _3 |" e* U
, R0 t% j1 x% i& ?9 M; M$ ?(1)如何加载ROM8 g9 o5 s# `' O* B
3 h" L0 E4 F2 u. F; W- P
先说说如何加载ROM吧
4 r) e2 r; S2 e: J6 h# U* I! P; |" S& G' o
以MAME 0.148 DEBUG版为例:
8 Q( |- s- V, p( X9 y6 i
1 b6 F! v7 }  L# b1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html3 h/ g) b- N5 e5 a
2 S& K& Q4 v7 \, I2 p
注:MAME官网的MAME是命令行程式,没有GUI。
4 ~/ O' Z- C' b  Q$ @3 N% l7 n# @
4 t9 `( t; H' k+ t8 z- R2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;' k4 g3 l3 V6 L# p7 ^: [
0 q3 V7 O( G3 }) x% ?& ]
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
8 u& H% V, |9 |. }$ g: O; ^7 o3 @+ S2 r. h
d:回车
: l1 m. a3 U; W* @7 q0 S$ y5 I. ~
7 v, T4 B" f0 z& Qcd mame0148b_debug回车
# `% M, U$ m( b; u) \+ i9 s
( X( z4 H1 o7 Q# e1 X+ d. z如图1:
4 c- r" A/ u$ x
; e. n% d8 N* r# x; o7 o, V" L1 M! Q- r  w2 I9 I" h4 ?
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
4 e  e! o( j: \1 @1 Q
* R+ D' \7 b8 C, }0 s4 {. G1 ?" h2 }1 i2 e: u1 o) I

* h) o/ R* \3 D! x3 ]1 E2 O5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;: m* f8 v8 m/ @- ~: U
' z( d: M9 v" D1 H
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
( N; m' V* U0 C& a- u
4 I9 s) ?% ^: y  y( V& z" c( b- ](2)如何呼出/隐藏调试窗口
1 I. {# \7 n; ~, v
' w( v- G; }3 I! m" e, ?1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
) i1 v; [# p2 r3 N2 H' M& ?7 P$ l$ Y! v

9 X! v5 T; g; x8 z% d0 D" }  i/ }- h( ~8 X* i5 Y* r
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:) w2 v& y1 E3 X5 d$ Q

0 F( z  q  p1 X% W2 e0 @
4 Y; {9 D9 j# h4 l  ^, T$ Y' g8 m2 r2 ~) K* H7 f) S  k% G6 ~
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
. S1 u' ^, L; j( ~$ z3 {+ A! _+ m: E" D, Q/ l4 f1 }! j
(3)如何下读/写内存监视点以及程式地址断点- |' E+ \: _0 n# J
, k+ g7 I. O' K# Y: z8 l. _
先说说如何下读/写内存监视点吧
* V* _6 u/ a7 d1 w! c' H) Y
' d+ t3 A$ Z' y监视点命令格式:wp <address>,<length>,<type>,<condition>
, p& z! g! G- ]* i; X+ }. q, h! A  ?3 ~  X- c
<address>是地址
1 P. `9 L" y2 S8 j; ?
: S1 p8 |) R* \& t<length>是数据长度,长度必须用十六进制表示& o' M% j2 C4 n5 F. g. @
4 n) F5 D  g7 ~8 b4 c
<type>是监视点类型,r是读,w是写,rw是读写/ |, Q5 `! [7 _0 e) t

/ [& c. ~. A' M例子:1 m0 w) @+ x. _" o3 |* n3 t

  b8 B2 p. s- ~6 M" T/ O/ m. O% }例如对ff8569地址下写监视点,数据长度是1个字节% P9 ^7 s% c4 d# k6 Y

" G  L4 }& W/ H  ?3 y( Y; R0 R- C& Vwp ff8569,1,w
% s1 F+ O+ r" a" u* k1 `  v9 f- i! I( z4 P
例如对ff2235地址下读监视点,数据长度是2个字节
. k. Z6 j( F7 S& z  T  }& a* i7 U) I4 y0 k) }$ E1 O$ u' [- i& `
wp ff2235,2,r! L0 S; `) U  q4 B% d

" [' I* T4 q4 y0 \例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
- F0 @( D' X2 l) R) R8 r+ \
8 [, K7 O- d* g' ~% q% G# L- Cwp ff7533,1,w,wpdata == 0
# B; l1 v/ _, j( w+ @3 Y6 G, s4 N+ U# U8 v3 e
以龙王战士日版为例:
: e2 [6 }) H+ }% `! s: B  ^1 Q
9 b. [4 ^6 F/ W+ G" G1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
( F' T0 K) s  z0 I
! ?. ~3 s8 K- P6 \( z8 R& D
0 Z9 [, a* p2 d* o& ~- S& {5 ~
/ u! E) O0 j  Q0 E1 ?2 C) s. g1 z4 \8 g9 l4 r& p: n
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
! e/ J  Z( j6 Q' Y  m. ]* ?$ s
' [: |; k, D- u+ h4 k! X4 H, R* ~! r+ ^7 y; m# `; |9 F- h9 y

& {$ G2 x& Y0 T( O5 Y* q1 ?% k接下来说说程式地址断点/ w7 _' e- x) y, R7 f$ U
8 L5 Z+ I9 H8 v" L
命令格式:bp <address>
- l4 u/ q5 S, }& R$ ?% _) q" r+ U3 {
例如对000488汇编指令地址下断点: j$ N" a: V! L8 x3 }& p- P) M

8 K! f- t7 c$ k0 F# N6 ubp 000488" {- Q& @% H; a+ c
, l1 C2 z6 E$ p2 H
当程式执行到000488地址时就自动中断
  [5 a; e0 w( [6 l, g- d* J( W- J# N: M/ p4 Z3 e
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
* N" L% A% O: c, p- }1 `
3 d9 W. o5 I2 h8 s, o- o4 `有错误请指正。# K! W$ {2 a+ d0 Q5 |0 F

$ v# g; J/ v/ |5 Z9 \% V. g) Q+ x补充一些命令:
1 U# b# H4 f7 q
9 X! e+ z4 n4 t: m"wpclear" 清除所有监视点& Y, A/ [3 _: {" Z- D0 M0 k' G% O/ v; ~
"wpenabld 数字" 开启监视点5 g, s9 r5 n" C: X3 _
"wpdisabld 数字" 关闭监视点
% ~& x; g0 z# J, |. X"wplist" 显示所有监视点) o; Z/ j: u# a$ K6 e- z0 Y. j
8 c) q# X6 k* _1 k" z4 h
"bpclear" 清除所有断点0 _. S6 g2 C( G- [; @
"bpenabld 数字" 开启断点7 B' R) _0 w* M: Z2 `+ @& v+ y8 |
"bpdisabld 数字" 关闭断点
8 J# R; C% m2 r4 V"bplist" 显示所有断点# ~4 G! b# d9 l+ G% l8 K$ d. E

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3535 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽/ _% x3 x7 ~; D4 r6 ?" u0 P

  E/ h  K5 L' h8 n% t, O以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2091 天

[LV.Master]伴坛终老

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

签到天数: 2575 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 # X* V/ o- h- @) v" \- j9 A
+ K& M7 m  D; `" h
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。( D6 p& k" Y0 b: f3 u/ Q, B# Z

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

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑
: E+ S  ~1 j6 D8 P& Y4 B# r! G+ {2 w6 R
CheatEngine搜到的临时地址当然无法对应MAME的内存地址. x6 \  p5 e: Z
& t/ u1 @4 x& \( e
新版MAME没搜索引擎了么?
0 y+ u! f. i  `, M晚上我看看
) B, W5 @& s: l6 b5 @9 O) S% A% Z( T! {9 u8 g! ]3 b
MAME查看地址的功能还是有的! W2 i* M% a+ _3 J% s0 a
菜单里的第一个选项就是显示内存地址. A" X" D4 J- x6 ]: e7 A) O8 [" M4 f
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2091 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
6 T! z4 _# X# h7 o- ^# h. ^
1.DEBUG版MAME有作弊码查找命令
0 O; ~' P* w& X3 i; S" G2 ?1 `4 Z$ l6 P7 U) Y2 b1 t0 K
命令如下:
" g0 b+ M) U8 Wcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]9 r' l* l  O; H( U
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
0 I) G* d; o8 j& V4 S<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节); \3 i# ~2 ]. B, M: u. [( J
<swap>是决定字节是否交换% y' S" o1 [4 r9 g6 Y
<address>是地址,地址必须用十六进制表示,例:0x100248
7 x. Y9 j. a+ Y/ L<length>是地址长度,长度必须用十六进制表示,例:0xfffff1 S; b7 I# ^% h5 A( M  h* [6 Y
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
' I) p9 {2 V* c$ e! Y- S0 h) N
请打help cheatinit命令获得更加详细说明
* w  v! Y6 `3 g: f# ?" n8 L( k( ~5 ~  x$ c) @. J; b
cheatnext <condition>[,<comparisonvalue>]
: J" V3 ^! G% s0 v; e3 K$ C<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
7 g! ]+ \! [0 ^[eq]是等于' f+ s! m- M+ ]/ r
[ne]是不等于- C# Q1 d- @, e. t* P, i- m
[de或-]是减少/ L: g& H4 }' G/ \: i
[in或+]是增加
. ^. x, d' W; |9 x' b' O* e[deeq]是减少或等于
( k6 Q3 T- ?( f( O[ineq]是增加或等于* T  @( e, W7 d( f6 t, m9 q
[lt]是小于: a! u; W8 y# u1 L0 F
[gt]是大于
# |; X/ w" v( X, D[ch或~]是数据有变化% @9 Y8 p* x1 b+ J' D* A) `

: v! |3 h8 u+ `  L) ~5 {0 r<comparisonvalue>4 |% r+ X2 H; v7 m2 X
要搜索的数值
" }( }2 [% E, I" I" ^0 j2 Q  L" r1 A- j0 J1 q: e, @
请打help cheatnext命令获得更加详细说明( Q: L  f& c& l. B! o9 H; B

$ }+ ~$ o" T4 ^  a- S4 C3 N9 ~  qcheatnextf <condition>[,<comparisonvalue>]" Y- [* K6 X: Q! ]/ W  `
说明同上! S( r: o! {8 @, \$ G2 x* t

/ Z, |0 R: m8 X5 E3 ~请打help cheatnextf命令获得更加详细说明
- ?& o$ Y8 g/ c6 @$ z- t$ o: r% U1 s: n* m) ]( F
cheatlist [<filename>]0 k: m9 ~" b+ i" m# G  |
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
) B5 Z4 Z& `6 e) Z- ^
# f* I* K- C; H# y! O: l3 }/ z请打help cheatlist命令获得更加详细说明
6 o. b9 W4 D0 O0 n. X% z2 T- ~  |" K7 h; B
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
3 r* P/ A$ z& g. G% s: d" b6 X+ p- r- _4 k
之后进行第一次数据搜索时要用cheatnextf命令来摸索
3 Y" v, u7 L3 ~# B2 M
7 m, B5 _: i% X; }2 p5 L6 n到第二次、第N次数据搜索时要用cheatnext命令来搜索. R( P0 S0 G) N9 R$ _) F

) G6 M/ ]/ f/ D: q* a举个例子吧:
* O0 v" l  J# I  B- O0 O( x% P+ L, L# p
以合金弹头X为例:( @; c# X# m2 Z8 {
1P生命数是2
; R; O" n: F3 q% D  Q9 P7 ^8 m+ w
7 o; h& e% i4 |/ T0 ?先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
: W7 p) i3 R# O& F) Y/ l
) N9 c& w0 p: s  {& R命令如下:* w. M! ~( q: `/ V0 J, W. e, l2 C  ~
cheatinit ub,0x100000,0xfffff,01 P& h; Y3 W9 s. n" Z8 V
( Q+ w. A7 J: d( L+ P$ R4 k/ \. Z
再用cheatnextf eq,2命令搜索生命数2
; k' r$ a9 C) |5 `& e% H& I* I, |
cheatlist显示搜索结果# D8 w& p; c5 p5 o4 o- z) ^

) f/ a# d- Y2 o3 l5 b死一命后用cheatnext eq,1搜索生命数1
7 |6 a. W' u: |1 }5 X+ g4 E  q0 r7 t. Y1 `! j& x9 q' R
cheatlist显示搜索结果5 a4 \  k' B  u6 C; D; c. g
.......
  R* I. U* g; z- D4 \3 x' X直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
" B" K3 H9 H8 D  T9 Z& b" ?% a+ v! @
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
& l# ~, F1 c! S" o! b- p( h" u4 @+ p5 C
没作弊码的话....+ A% A0 Z5 K0 T
6 C8 ^5 m0 Z& L
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)- w" y  |+ r$ e$ v- a% M

5 U  h+ U6 y6 _或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)9 @( n( z6 w$ X6 N! [1 c
" G" I7 u6 E6 g  ]
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行; I" n' r4 E* ~3 k. d" E2 n

0 S$ @7 T9 s8 ]4 V& Q, t2 T要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
$ x" K# v& R) S& i& A1 ?
8 x) e8 l* q: F+ G
回114:
9 w7 ?: y& u/ ]4 ~5 o
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
$ |6 \( @1 C! c% z0 G2.没地址如何查询地址?看上面我给zsyf的回复

7 x& \5 n% w# p8 {+ `0 k2 ~# F& 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. 幸运榜 / 衰神榜

签到天数: 3060 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-10-5 12:07 , Processed in 1.093750 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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