EMU618社区

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

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

  [复制链接]

签到天数: 2179 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
$ X4 W0 ]! |7 z- Q3 X( a, }" b
: @: B1 d' H" d- b# M(1)如何加载ROM! c2 ~1 e( m( X3 x1 r0 a/ X
6 T1 q4 @- `/ a* V6 p6 r7 |* F
先说说如何加载ROM吧/ {0 T1 h8 |' C) t) w5 C
, B' \2 I, @! b$ A: _
以MAME 0.148 DEBUG版为例:
/ \4 {- K6 ?6 |, e0 j& s) l8 x+ O1 Z( x
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html' W2 D7 `4 D, `" Z

* u, ^( c& i$ f* ~% Y- o1 Z5 z, {注:MAME官网的MAME是命令行程式,没有GUI。
4 |- `& R, Q. t& Q5 S! l  o' e9 u" e( [6 i$ i1 r
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
( C8 }8 N- M6 c2 m& V3 v3 G0 W$ H% q# n
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
; c* w. g) w  v: A, x) z! d% |- N: a3 D1 `% m% C- g. w
d:回车
* f/ h0 m2 r/ W& p6 u3 x; Y9 e) W9 k
- }! V1 W1 D1 Mcd mame0148b_debug回车" O6 Z$ a- y& g' ~' b; R+ W

) [) X9 q  i2 Y4 l( `$ r如图1:
( u- ~7 s/ W2 z8 A5 h5 X" H& ]" z& p! {2 v

2 [  t, Q/ b0 {4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:6 ]! s' @& D7 S8 F+ o
7 o% W" r* \  D5 E7 x9 s
( n  ^% d3 j" J# C

! k, F2 P3 @4 R* z1 H! A5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;! f1 s) w- w! o! {+ W* T- d

! Q, P0 u/ f+ `2 z1 O, q! o8 K' A6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。. O7 ~# V0 K8 ?) J" _; y( n4 C" Y
$ A  s' \4 o" v  W+ U3 h
(2)如何呼出/隐藏调试窗口
2 ]& D2 b0 o# ~& a4 G# d* _  `0 f5 s6 T
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
6 I4 y, b9 A' `- R; L1 h7 u3 L% B0 k, `& g9 p; R. R" ?0 W/ m
( E5 o) o8 K) T* B

7 X0 z1 W  d: C* Y: ^3 k/ C2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
$ M4 d" l; S9 q9 @1 z2 n1 x8 c# ?5 \
: B* p/ L# o( a4 g( z# l/ O! i) Y
4 p  a/ }- E" `3 T/ S8 s* X) ^, k
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。2 ^  z$ h$ r$ F( b1 f! p

9 ^, r5 b: T) Y' W. j(3)如何下读/写内存监视点以及程式地址断点
+ D" u% Z9 k- }6 d  ^: l
$ W0 m4 c+ S& C8 X  W: i先说说如何下读/写内存监视点吧& t1 u" X2 z, q" V
! p/ m  y% G9 h( A5 Y/ I3 g
监视点命令格式:wp <address>,<length>,<type>,<condition>4 h# J. c" p5 J" ?  D( k
3 `0 H  ^0 D; P  W
<address>是地址
( [& g3 f5 O( ~  `! @, j+ k$ j9 d& q
2 N1 J/ I. E% m<length>是数据长度,长度必须用十六进制表示, a* w$ [3 E# e) T" h& \/ \6 Q; e3 c
3 v! Q4 k+ u7 B% I/ L
<type>是监视点类型,r是读,w是写,rw是读写4 K! k' K( E: ~
8 @. L) w% A; s" P; s6 _/ O- W
例子:7 z5 j$ _3 d$ w+ c( k- G: ^

6 `2 t1 j2 }5 a4 p8 M* A例如对ff8569地址下写监视点,数据长度是1个字节( u7 `' C9 I& U
& G/ Q6 V3 p: b- q$ w
wp ff8569,1,w
) H/ e7 M5 p" M" k  }- Q$ B  u, F
例如对ff2235地址下读监视点,数据长度是2个字节
8 Y  q- b5 G9 J" ?. h( t+ }' t9 S5 q& ^) P/ ]4 X) F/ E; z
wp ff2235,2,r, O. v8 C$ H1 N% K* [: O! K

/ u! N! f% X+ i. E5 H" ?7 V; K2 q  q例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
  D+ F: w2 y6 Q% R$ x' G! b
2 A) |- d# l4 V7 _* Qwp ff7533,1,w,wpdata == 0
( ?. G$ ], N5 c2 U  L8 R# ~" q
. \2 U8 @, ^/ l, l; `7 L9 G8 D6 G# _以龙王战士日版为例:
) w$ r, e: e3 ~* m! a/ V+ C7 [7 R/ I* `: C  e" W9 `  Q& m: U
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
/ I$ \* t4 U( K0 @% S8 U$ ?/ g  [9 Z9 Z
' v% U4 ?# |! l+ F
& d: @# q2 c: ?* n3 X/ Y; e
  G4 E. Y5 ?9 O1 H  d9 j
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
- l- g6 {  k  x6 Y( P7 R
9 n6 U8 z8 O4 _) W4 s
/ |5 \* @; ~- Q7 t$ L4 r9 k4 |; V
. h' c; V$ j% b( T' l8 [. E接下来说说程式地址断点
& m+ l, i& R" L; P1 w3 a
/ L5 ^) P1 j6 k' z2 X命令格式:bp <address>
& J' s4 l5 c( U+ j: p) K5 @
. |+ ^1 N* _% P. p5 {例如对000488汇编指令地址下断点
4 E$ L& \" L+ r
1 p$ z& U5 L$ N6 b+ ?bp 0004888 Z6 K% [; Z5 `9 L& @! C

! U2 Q% W/ F2 t2 M0 b3 }# r当程式执行到000488地址时就自动中断" d' T5 S7 J" b- }, U7 C# {1 i, `
" C8 C, d; A) @) Q
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
. }7 B3 s# t. @+ ?# ~
: x" A& a, ~, d有错误请指正。
- a; c! S* a2 d, S& I- J% s6 Y% ~8 M, n' |/ ^. ?
补充一些命令:
& I$ E9 V5 X0 P2 d1 b8 A2 O4 ]5 e7 w, t6 D6 [" Q, C) y! _+ z
"wpclear" 清除所有监视点: w3 ?) @% Y% l7 l6 J* c9 O
"wpenabld 数字" 开启监视点/ ~( F5 z5 O  s
"wpdisabld 数字" 关闭监视点
2 f, y. g5 z  N/ v, i' C" c+ G0 L$ O"wplist" 显示所有监视点) r" k  [0 d$ {9 E

" s' k% A: o& s3 ~. s3 X"bpclear" 清除所有断点7 S& D- N3 Q0 _. B/ q4 _
"bpenabld 数字" 开启断点
# z6 G% v+ ^5 |$ u! g, |+ E8 ]& h"bpdisabld 数字" 关闭断点
5 T: |4 D% |& X"bplist" 显示所有断点
* }/ o% Q5 h  }' m+ y. A- v

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3623 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽. N' O% ^# p: N* D6 V
( e  U: ^3 P* Y& C+ x
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2179 天

[LV.Master]伴坛终老

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 ( _3 [# m# g* Q5 {: H6 b8 x

1 s; W2 t& W) L& G6 t: W太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。! R' G7 d/ ?3 M
% V, z1 {7 k) s9 \
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 ; o" W8 B; b* N( k8 l4 F! c
) B0 N6 R2 Q3 n0 ~( u5 P
CheatEngine搜到的临时地址当然无法对应MAME的内存地址, b1 I8 ~% T3 y2 h# G# X
) P* S9 v  \- _( S$ H/ G$ @
新版MAME没搜索引擎了么?
6 e' S4 a6 V7 Z; j1 `9 F% _  t4 ~晚上我看看0 p& [. \2 x3 _4 P' i, R

6 W. F5 Q# `% g) P1 e& fMAME查看地址的功能还是有的
: ^4 G% m$ _& A9 i) ]菜单里的第一个选项就是显示内存地址
0 P/ Z& P6 J( K( e! u2 d9 z" Y. @/ m不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2179 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
0 n1 i7 [7 g, n7 V: U) s
1.DEBUG版MAME有作弊码查找命令3 f0 x, I( F# b: x0 V7 @

9 U  [7 d( Z4 V命令如下:
3 h- j& ~  n& T) d. pcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
; ^# @  P1 I  x5 C, s8 j<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
3 r' j* T" g5 r# B$ J. G$ x<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
/ V, l# `9 W* J9 E+ ~<swap>是决定字节是否交换
- r  c2 C- m% g8 J; y<address>是地址,地址必须用十六进制表示,例:0x100248: L& ^9 b9 [8 f
<length>是地址长度,长度必须用十六进制表示,例:0xfffff  k; }) b0 I1 u( S
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU8 Y+ D  H& Q) r8 C6 I. K1 Z8 \2 S; ~

3 L( o% X: {0 B# W请打help cheatinit命令获得更加详细说明
3 R7 b- G  c6 L2 o/ U+ ?6 ~, P, G
cheatnext <condition>[,<comparisonvalue>]" q. t: l. S. H" m) t! Q$ M
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
9 Q' Z. o; |$ W5 K[eq]是等于3 M' }* W+ r; R4 g
[ne]是不等于. b9 g2 f. j* V$ g) q8 z; d
[de或-]是减少* J, L- R! q; U% o0 F
[in或+]是增加
) ~: z1 \8 C3 R. g4 W[deeq]是减少或等于
0 W, _* ~  F% q( K2 m[ineq]是增加或等于) N1 r2 I. o; l* p/ v$ ]
[lt]是小于
5 y( h2 T+ {! z; n[gt]是大于8 j, f' N; ?$ G
[ch或~]是数据有变化
: X: c  o* f/ ^5 {% \3 a- n9 q6 \
<comparisonvalue>. l3 o0 Q4 ]2 C! H' d: A% I
要搜索的数值
: X$ l" r6 o- |- w1 d! n2 f) O, d! o  T( |: i% @2 g" h
请打help cheatnext命令获得更加详细说明/ x* X5 D/ b, d; S

& g  j/ P. Z  F; O/ O" p0 xcheatnextf <condition>[,<comparisonvalue>]
( o; `' W* y3 V! B+ ~& a7 z+ x说明同上7 ?. {! Z5 p3 Z

2 Z, f* y+ S; V* j; |9 H, a- b# E; r请打help cheatnextf命令获得更加详细说明- G9 q! W3 v* f4 Y7 [6 h
5 p; e! H( l( H" q$ K3 M7 |
cheatlist [<filename>]
3 u( E/ ]3 ^+ U0 E显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
, d9 J, |. ^( u! X9 O! g: V: D! Y7 B3 m; g; O
请打help cheatlist命令获得更加详细说明
+ B/ p7 D9 ~7 j$ `
  V3 C4 ~* H7 |1 W6 s第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化; q% M9 k7 {( s! ^5 v% n

3 Y. I  R( y, m4 H之后进行第一次数据搜索时要用cheatnextf命令来摸索- s& G& m. C5 _$ a; P% h
( q' E) p* O/ v+ q7 q+ w# h
到第二次、第N次数据搜索时要用cheatnext命令来搜索
  n9 H8 N1 B; |' W1 C" Y7 L
! j: |4 M6 z0 l举个例子吧:  f' f% x$ Y' Z& _- E

4 F+ {: T' h: `以合金弹头X为例:9 Q3 G* G. e5 l( I8 \7 X; T9 _
1P生命数是2
1 L0 u; _+ Z2 W( z" Q: `1 i( \; a. u- w
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间' F1 \, A# a) l
3 e& C% f: Z: t$ l2 m- z
命令如下:
6 n, u8 Z# Z- `4 R8 ocheatinit ub,0x100000,0xfffff,0
6 B4 G2 n+ J0 G+ R/ E" x; v& V) z3 e1 ~0 K6 S+ N
再用cheatnextf eq,2命令搜索生命数2" V; b+ x" T1 e$ W3 D. y! U
% S: E6 R- O. @6 C7 G
cheatlist显示搜索结果
7 u4 f2 Z; u: s# o# ?1 w# n1 j
# X6 n9 m7 t5 M) [+ L5 h2 d死一命后用cheatnext eq,1搜索生命数1" _6 f- i3 \" X: I
0 ^8 \! G: d; P- m9 B
cheatlist显示搜索结果# u" Q- Q. ^7 h9 t  k* v( i
.......
* j# \% Z& w8 \直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果# S0 ~) |& A& a0 {! A5 O
0 X; ^) U& E- e6 K8 h! P+ e
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
1 W6 V  ~+ y* r
  V6 F3 h, q2 _! x; f没作弊码的话....
5 P5 P- ?9 U+ c: a6 M+ T7 D6 B8 k8 S! r
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)' N# h2 e, f; d( g* g

% M% W, P- {& {9 d: w+ p; p3 f! H; S或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
0 h* {. j/ `) D0 p' c5 A
) O; u; _, @% Z+ N6 l- P3 W2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
, M& @3 O3 L& W8 j7 l/ E0 K8 E/ v6 H1 r: @4 j7 o+ n+ y3 L2 P& q
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

. d2 I9 V6 o" ~
' n' \( [) Y* m6 ~1 B8 _* r/ A回114:5 y  j. _7 G: u) l* I: \9 g5 k) ?* o# P
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)! P" o6 s( l1 |
2.没地址如何查询地址?看上面我给zsyf的回复

. a# h1 P5 @5 F: R' V1 S# I/ D4 i. v, S/ f) j3 V* M) m
打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3142 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-2 03:12 , Processed in 1.106445 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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