设为首页收藏本站

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

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

 火.. [复制链接]

签到天数: 2005 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。, n& I& ~% I' E$ I8 K. q
$ o/ V0 V, |: P$ K% w
(1)如何加载ROM
% h8 ~. H6 Q5 s' Y  p3 K5 N# s/ s4 z, N) K8 X
先说说如何加载ROM吧
8 X. c! k1 r" _% ?# ~2 J
. ~( ?4 A% H( x' L以MAME 0.148 DEBUG版为例:
3 P1 `# u0 p& M- ~" [2 R2 J( r6 C$ h# V6 K9 F9 ^& _
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html2 k/ [3 T2 l0 x/ R

  c* d) v+ ~6 l注:MAME官网的MAME是命令行程式,没有GUI。
4 H7 q) j( F! v2 S9 o3 x1 z7 z' P
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;% o$ G1 A) R9 q4 X9 a/ y

/ g. X8 o1 \1 H+ P3 g+ p2 M( z5 Z3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:' r7 D4 Z8 i: z, G5 x5 @; I
6 Q, v- R& H' e; O
d:回车& n4 o7 w3 \7 {4 x; O" m
, h& j6 A1 g1 s; T
cd mame0148b_debug回车# k  x  q& |  ]* V
7 h# q9 a: b" s3 x' y' _. t
如图1:
0 u% `- l% e4 {: h, o5 `4 t5 d! k& s3 A- L8 i* z' ~/ a8 r/ x

9 F8 V$ F/ M6 Y4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
0 R0 B; v- N/ V9 ~; a2 j- H* |% t$ q

! [9 j( {+ ^& E7 O4 D# X8 f$ s& A5 m
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;- Z- n* s; k6 `3 a2 Y1 }

  @. i9 U  I1 }6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! x1 v( V- K3 L. W% ~( |" j0 y
- g, a+ x: a4 B. H: x(2)如何呼出/隐藏调试窗口+ R0 d3 s+ r( N- O0 T9 v

5 L& b" [6 k6 K1 A. j4 V1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:% j9 ]! n0 H! y; Z' _, e4 d8 ^" W

" q: i( F2 J* g& Z* b" Y  ~& c3 e$ c) R; H5 T' W5 ?2 G6 L
$ D! x: u9 i6 `% U/ w2 R2 q( _
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
( Q8 j7 {6 u' q1 _$ L3 H2 o( c+ {) s; B0 @6 ?, z2 Z

1 k$ _6 S0 G4 T5 n  V  Q1 t
, g2 x* v+ v$ f& t3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
* D4 T  I7 [$ c/ Q0 J" u8 J1 ~+ c8 b# R% V1 v
(3)如何下读/写内存监视点以及程式地址断点3 v: s& m" E1 i7 h4 n
  C& c- {; ]; U" E. x& d
先说说如何下读/写内存监视点吧
; i0 q6 `5 I6 I3 @4 {4 e  b# d" j) F; E3 I
监视点命令格式:wp <address>,<length>,<type>,<condition>
3 U: P( f/ ^  M
( p0 P1 V: N& c* n<address>是地址
9 k3 q5 z0 V6 \: z% K; l% s( ~- i/ x6 p& `6 V$ h4 L! J
<length>是数据长度,长度必须用十六进制表示
( B* `& r4 k: Y$ q) i
' h, r6 {$ @7 w. r! y$ p6 a# d2 m<type>是监视点类型,r是读,w是写,rw是读写
. B. J) u8 `; z. }- [6 s7 d; c) \; ^, S/ D4 j/ O
例子:9 b) v$ c: H! y2 `7 \4 w. d6 l, H
% a2 w6 C1 k& @  H9 {# U
例如对ff8569地址下写监视点,数据长度是1个字节
6 m" \7 P0 D7 ~- N, C, \( Y! d8 G- C* u8 Z: W* s8 }0 ]/ r
wp ff8569,1,w' q* L2 N4 l1 W- w

2 j' S% J( F% b2 t+ t* L例如对ff2235地址下读监视点,数据长度是2个字节4 b1 E6 M! G- H7 |7 t4 B# G- T# a

3 \) S8 y! y: M4 X* a  h9 nwp ff2235,2,r
- c* T! H  T# G& V+ t$ W/ P! V- b) m, I/ @3 |8 g% _( T
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
0 s9 h& m' r' W( {# E* X  X: f
% Q9 \  F6 Z) L* g7 q+ ywp ff7533,1,w,wpdata == 0
* j  u0 @/ c4 _4 ^- V, J' X1 Y0 p# |+ N. u1 U* D* b: I2 c
以龙王战士日版为例:
2 q! _/ N: \0 E! f$ ?4 v8 q+ H4 e
7 D! e: t) R9 O: Y/ }, l# q1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
+ r5 J4 z2 _' Q/ G3 m. d# E0 Z
" V' g/ u, _; H8 S* y5 w
( n9 F$ c8 f8 q4 Z0 n  {. i/ ~2 Q5 n" @( c- j* D

9 O4 p2 x; m9 k+ e3 _2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:8 g, G+ H, _/ R  U9 p: x6 {

6 b) n3 L# ?, J, b& B# {& v5 j3 a3 c8 l% H" g3 K) l
! P/ t& ~7 W+ P) |; _
接下来说说程式地址断点4 C" {9 d+ l6 R  `

9 s/ `+ D) U' b( u+ T6 F& `  a8 e1 c命令格式:bp <address>4 Y. ^; @4 Z% q5 L4 ]' ]
6 R4 G4 R, I+ N# H3 k! w% [
例如对000488汇编指令地址下断点$ @/ m" _8 _; a' {, L# x

$ j! d) I* z/ S. t* Jbp 000488  B$ t- N' ?& \2 ^5 H. _5 V1 _5 e; @
7 z( F! D5 `4 Z/ _: u
当程式执行到000488地址时就自动中断
' ^# K& q* q7 p+ G% A3 K3 o0 I  l9 _& f& ]; N! [6 a; j
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
1 I  m( w. c" I" U! p5 ~( ^# b1 D6 i
有错误请指正。
6 r( H. [  P( @$ d- R3 R
2 {& k. \, Q1 z4 j1 k$ c补充一些命令:" A0 g/ s2 N$ G0 ?  \! f

+ O/ j! Z' a) s3 H' D/ Q$ D"wpclear" 清除所有监视点
5 R$ f. h7 Q# q' y, R# h) w2 b"wpenabld 数字" 开启监视点& c' z2 L3 V' z# [6 W6 K. D. P
"wpdisabld 数字" 关闭监视点
! g0 O1 g" K# z3 u"wplist" 显示所有监视点# d8 j( E  c* t% B
* _* T* H* R  M1 l( \2 ?2 m
"bpclear" 清除所有断点: o3 G8 h6 _% Q* g$ E3 a) ~
"bpenabld 数字" 开启断点
/ P7 v$ Z5 z' T' Y0 H"bpdisabld 数字" 关闭断点
2 u% b) U- E, W/ K! I3 B"bplist" 显示所有断点
9 W) O  W3 B' |- c$ o

本帖子中包含更多资源

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

×

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 3445 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽0 ?, w. p, c; w( S" h' g6 [$ E7 C

' c" Y! k: }5 q; s! b2 W! ^以前这调试器都是直接出来的说
回复

使用道具 举报

签到天数: 1296 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 2005 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 $ q: Y/ s/ p: }0 t& T& I% _' L

7 ^/ ~( U. B/ W4 y太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
' o4 H+ K2 v# G8 q6 y" N
6 Q" ]9 u$ d" ?$ U1 t! o! x- U其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 2 ]/ k) E1 n0 D
' W  H- P2 y! V) d* l5 F5 O7 `
CheatEngine搜到的临时地址当然无法对应MAME的内存地址& G; P$ s7 }1 v$ @
' b5 m! C$ m, Q( R! P9 F% \
新版MAME没搜索引擎了么?! |. Z0 i$ h4 F2 j
晚上我看看% V$ |# p! `- f: f5 \3 C& u

$ v# Y! T7 y; N6 k" gMAME查看地址的功能还是有的% ?/ O1 T5 B$ e/ r/ Z9 `
菜单里的第一个选项就是显示内存地址& ^/ F9 X+ V1 @, d6 L8 M) x  M6 T6 p% w
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2005 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
7 {- p! @8 t: ~- K, n# z3 P: j
1.DEBUG版MAME有作弊码查找命令% i$ u1 c7 V, f9 L, [0 ~% \
2 {# N! n3 ]/ \1 _# y; J+ e
命令如下:
, ]. U3 D3 w- Y# p# r- o7 a' ycheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]. d: o2 {$ S5 G8 ^9 g
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
* J$ {4 a- S0 ~  ?! q5 u$ Y9 ^<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)$ [) ~! E2 ^$ ]# c
<swap>是决定字节是否交换3 L/ j' Q, f. s3 s2 L; w% i! n3 g
<address>是地址,地址必须用十六进制表示,例:0x1002487 b0 h8 F' o. p9 A: F$ d
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
& i, l9 [/ J  g- Z& {<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU( M5 D7 J9 j6 t7 B9 }. ?$ f9 v

' q% S* y, a: {; |" K7 n( N0 y请打help cheatinit命令获得更加详细说明
4 L" [- v! d7 Z0 x5 a& Q
( L6 G9 W) v1 I' a! _' jcheatnext <condition>[,<comparisonvalue>]
+ T! L$ I0 ^- g9 Y<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]2 D& |; N# }/ L6 _
[eq]是等于
( m4 x6 B. l7 R3 r3 _8 n" |[ne]是不等于
$ Z5 `' p9 J. Z- }' G) _+ E[de或-]是减少
8 ^) l, z. J' q; Y1 Y, M[in或+]是增加
% m2 _6 v' k$ L" X+ Z[deeq]是减少或等于/ j; T# [( ~8 L5 S
[ineq]是增加或等于/ A( f; A5 O! P/ }7 `) u2 h* C/ ^
[lt]是小于
5 N$ h) K+ L1 r" }- C[gt]是大于
  m1 z$ w4 b+ \[ch或~]是数据有变化
3 Y2 K9 n: d+ y& O5 t) S4 B: N
* L2 a+ c' k$ E<comparisonvalue>6 t/ \& X: C9 \/ C
要搜索的数值
2 m; h5 W! y$ I$ P! k0 n* }- z* k
# K. S( b2 O* f请打help cheatnext命令获得更加详细说明
( {1 f7 m) V2 f/ a. w' R* G# w  ?5 \) `% {8 `3 S* v8 V0 a; k7 k
cheatnextf <condition>[,<comparisonvalue>]
* I+ N0 E! v) I% s: J# N) X说明同上
; Z; p- t1 [( C7 L
5 T9 ^2 `) [- O# F- ^7 C3 ^请打help cheatnextf命令获得更加详细说明' C. i+ ^, R1 t+ `; M8 I1 E
! S& _5 X' v( o3 o9 o1 L
cheatlist [<filename>]
! d! \3 A2 ?" `0 w- h  g显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
. ^) t: e1 e5 \0 d
* q! A& L6 g+ z! \8 G* j+ m/ p请打help cheatlist命令获得更加详细说明' \" I& K" V! r/ i* D6 O" D

# @2 S$ F; B$ p; W4 X7 g第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
2 _, v6 t7 Z: l" m; z8 p
0 R4 a) \! E( R% _之后进行第一次数据搜索时要用cheatnextf命令来摸索( M9 t) w, A9 y+ \
# u4 U1 \, n( ~7 C
到第二次、第N次数据搜索时要用cheatnext命令来搜索
! O* e4 Z6 H+ {$ L! l1 _# y8 P1 j; X
举个例子吧:: `) W' B5 j+ V) T3 Y* b
6 s- W& |8 b5 J' G7 e
以合金弹头X为例:
  o$ m  ]4 j% |  D# _1P生命数是2
" E5 t" N+ R& v- w
+ S1 C% m9 x( i- x/ h0 H* M- A先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间. G9 g: a; V6 Y" N
* ?* y% C6 L7 g4 J$ j  Q
命令如下:( m/ B8 r/ D1 ?& @2 P* i+ L
cheatinit ub,0x100000,0xfffff,0( _1 G$ B& D: x  C: l
6 c; q& U* b5 b1 C
再用cheatnextf eq,2命令搜索生命数2
/ i9 m5 C4 C- P  `) R) l" x8 }; T" b# V1 [3 ]- v/ ?# w& l
cheatlist显示搜索结果* F2 O4 y  Q+ N: r& N1 {; M4 M( C

: |7 j1 g+ S0 Z0 V( F死一命后用cheatnext eq,1搜索生命数1" H; I( o: i' E6 W: I3 f6 X/ C

; e2 L" O$ I8 t7 Dcheatlist显示搜索结果
/ ^0 K: L* P3 K; S0 W" |' i.......! M, b; @4 ?1 P) Y1 g' I
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
/ E) p/ e- A6 X1 `+ K  g2 y. z7 x' X; [3 F  b0 p) e! ?6 q2 f! {
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。$ ^8 e, _4 @% a  d
) `# I( b5 n% A' s1 r
没作弊码的话....2 p  z8 T6 ?# R2 z
( M: Y) w, h; S  b, ]7 U
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
( D' Y( k: t0 X' J6 z
& u9 G, }; J0 G- `' n) e或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)/ ^" M6 K! C+ h$ i7 m3 _0 |

7 k. |( J/ u- i0 P2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行: }& N! d5 [& r/ r* r. H
* }. H, h2 L4 j1 m* |/ s
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

. W! W7 e0 P( E; j, j( Q. H* r$ e( ~
回114:
- w9 ~* `  |0 a7 D. v
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
+ X$ m( i9 x  F2.没地址如何查询地址?看上面我给zsyf的回复

$ q' P& r- {; \% t# L7 z3 T  ]% U7 p( M) l5 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. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 2977 天

[LV.Master]伴坛终老

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

使用道具 举报

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-7-8 17:16

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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