EMU618社区

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

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

  [复制链接]

签到天数: 2072 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。9 a$ q& K* ~5 l# L) E0 X
( C7 f  k6 \2 z
(1)如何加载ROM8 r3 u+ w8 F1 @- S" t' N, l" o

& _) k$ r/ z4 g: q4 ~3 h先说说如何加载ROM吧$ s8 m% Y! v; }$ L, s

- H9 t- t# E" n以MAME 0.148 DEBUG版为例:; Y! h* G/ T/ u$ n

! L" S# I; J4 u' h6 x# c2 W1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
2 i7 m( k" ]- w# X9 g
0 q# G) V5 {$ }# }, s% B& J注:MAME官网的MAME是命令行程式,没有GUI。+ @! t" K# Y* R& [
" E7 ?% Z8 d3 V+ f, y9 E
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
$ @3 V( w& ?+ @
0 e- O8 k$ A& R! n2 t* ~3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
: }1 r3 n% [% n0 ?
5 z8 s2 O3 S# D. d, u/ G4 md:回车1 P  ?5 P% k! i" S2 ^

0 z4 c4 ]6 X$ x6 \4 d/ Z& |1 u% ]cd mame0148b_debug回车4 r  q8 z9 M/ G# Z# d

& p8 Y: z0 F) A如图1:- \  P$ o6 A) f5 k+ R
/ k/ B/ s) t1 H% M3 W

$ {* {6 b6 M" a: t- E7 Z2 {% i4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
& f+ }9 F; t6 g4 _, @4 ?, X0 ^; G
* y" m) n4 O( O- _6 f& C
5 t  I' C  K& w7 r/ ]5 P; I- x0 @; A8 g( Z0 y2 D% Q
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;9 B7 V4 q; ]; ~% S5 O: ?

! ~6 {& q: c6 A% i6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。7 Z! t2 O( N" E) N, {6 H5 W6 `
; V4 ~3 [, `* C6 \; I, v
(2)如何呼出/隐藏调试窗口
$ D* ]+ ?. B( W1 l* B" S9 b8 [- {
4 Q9 L0 f% ]' A: O4 U7 r1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
  _% _) k6 C8 f  q; o( }0 k5 m) ]. L" D& b
/ }) l8 Q. l2 O+ C- S( i& k

# I* R" O8 u' j3 D- {2 Y2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
! K9 i7 Q1 Y5 O2 n% a* O+ n; o0 \5 |0 Y& A4 G1 [0 [

* A9 t& l- o$ J- B3 l1 p! k! [
! }# M4 W6 h+ @2 i& ?$ |% U3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
# R, A. `: S1 V5 J, q2 Z( ^" c8 \5 z
. }0 v. z; h  h3 F) Q5 ^: i" p; f* o(3)如何下读/写内存监视点以及程式地址断点- c% V7 b' M  e
7 s4 Y8 ^, W! A3 `- z# j% f  Q5 E
先说说如何下读/写内存监视点吧
! K. s8 y% X7 q$ ]& u" T+ M* L2 l$ ?* h1 N
监视点命令格式:wp <address>,<length>,<type>,<condition>  |4 Z; k( C. _: R0 j+ e6 ^) O- Z9 t

; k1 o- G* G3 G% `0 a$ S% Z<address>是地址
) S* @" O' ]. [1 L! L7 C* m6 S9 P: W* Z* \2 Q7 B* k% l
<length>是数据长度,长度必须用十六进制表示) H) |) f7 D) l7 W/ ]

# X- h, V7 F8 L<type>是监视点类型,r是读,w是写,rw是读写) u: x8 j! ?' o% U$ @* K

+ X* ~+ y' u* M8 v例子:% c9 F- J+ {- A/ w) E, y3 Z

% h' _5 q% R, U- o# z$ |6 r! o例如对ff8569地址下写监视点,数据长度是1个字节$ }  l7 X: s7 M* M

$ @9 e; g. C3 A3 A6 i1 P% c& Twp ff8569,1,w
. h/ U: I# s, B" ^# X* A5 C( \- y( v9 A% Y3 P$ W4 y
例如对ff2235地址下读监视点,数据长度是2个字节! R& r/ }, Y$ Q  f

6 G# e4 @, @4 }% z" Z* ~5 ?wp ff2235,2,r
3 V; Z. }$ q$ V* E5 J
4 }( }( s- o9 o例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
# i+ Z! @- z6 K7 X& p& R' N) y5 E2 q; o5 d' s
wp ff7533,1,w,wpdata == 07 u. Y6 {  K2 Y: W

* r% B+ l; n0 |; o0 g4 R2 U以龙王战士日版为例:) O5 o3 K6 y  m0 G

( [6 R  S: \9 Z5 y1 g2 F1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:. M$ z6 U* V6 b2 Y
1 j) ]1 E4 t. t

( d& ?+ g, S/ W: _7 X8 _' G
. o0 O3 O8 e! H0 ^$ k& g1 U
& Z% E' T& G. X! M" `2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
* J# k, E5 j* T
- R! w) I! G; R4 Z7 P1 L$ _
, i: U7 g( q( G$ W% f0 P
! Y9 A& z5 x, B" E* z! k5 o; i+ [接下来说说程式地址断点
, A: n) v: w0 f& \8 {$ H* D9 V: Y5 h% _" y9 A; v# [
命令格式:bp <address>& D1 S9 u7 n% G0 H- T

2 S  j. Y, B$ W6 J, D例如对000488汇编指令地址下断点* ~' m$ k) p+ B9 G. F

4 T, \1 d. J9 l: N& N. Jbp 000488
- r# }" {8 d$ t( D0 j& e; M8 T* |' `1 D' V2 J5 a" y
当程式执行到000488地址时就自动中断
/ F& e4 G. `8 l8 w  |" B8 f
7 }) p5 C6 ?+ Y7 D( z9 P" l更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
; w. A. A4 \3 V$ e
$ O& ^3 F% Y+ K# d3 k7 q; X有错误请指正。. l0 ^2 e, N; s$ m2 R: w( X+ |

0 J7 i+ f' f6 Z& V* k( E' {补充一些命令:% G, b9 u0 v4 W3 |

  d0 @7 s. T, k9 n% S) C2 N"wpclear" 清除所有监视点( ]& A' f& Y4 c" K& \7 H; ^
"wpenabld 数字" 开启监视点
& U+ C  I, {) C* c# x8 S/ z/ h"wpdisabld 数字" 关闭监视点6 R7 s4 G! U7 c3 h
"wplist" 显示所有监视点
7 `7 r' y9 I  f) g' r  {0 M6 _+ s4 [; ]. e
"bpclear" 清除所有断点! d2 {  c! O% z# O+ }( A
"bpenabld 数字" 开启断点; L) g6 m- v, g9 {# D# u/ V6 }/ X
"bpdisabld 数字" 关闭断点* F: c1 Z9 ~) A/ d
"bplist" 显示所有断点6 _) N( T5 [7 }- R, x  H1 I% ~; S1 j

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3516 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽. Z) m) \# @# Z9 L3 t* x! d

+ l. u: z7 H+ q0 ~以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2072 天

[LV.Master]伴坛终老

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

签到天数: 2572 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
9 q2 N  K* r/ G2 M2 d/ q- d8 o( F7 {6 p( |
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。( C; R; I5 R! L
. s" K4 Q  E+ f7 ?' ?  n
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 : `5 R! m% n& P) F- A% I2 D
- F' Q1 l2 E8 Y* o7 ~" o& V* @; G, t
CheatEngine搜到的临时地址当然无法对应MAME的内存地址
$ d2 \& y! }% x# s  ~9 v0 d' j; C3 I6 v8 _1 U
新版MAME没搜索引擎了么?1 g$ V5 D) r% O& `; x" T3 F
晚上我看看2 R. `) N  s" @1 Y6 M

& e1 k* _" P9 s- p1 eMAME查看地址的功能还是有的6 O' M2 e, l: P
菜单里的第一个选项就是显示内存地址. |& V  _7 B7 C$ A0 K9 b. V" p! |6 P
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2072 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
0 f0 Y* I! N( ]$ k. t. E
1.DEBUG版MAME有作弊码查找命令, h) f; H8 ~+ S, i0 i* s
* U7 i4 Y- r2 _0 W( N
命令如下:3 G  z3 O4 z5 C& B
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]: {8 f  u0 c( s4 |: u+ Y
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型- z0 f: m$ t/ R
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
- Q' W- S* e7 Y( M( L+ i. b<swap>是决定字节是否交换/ i0 G( W: ~. Y' b4 ~) A7 x% o
<address>是地址,地址必须用十六进制表示,例:0x100248
( P, n( S, {8 c/ y" l1 n* U<length>是地址长度,长度必须用十六进制表示,例:0xfffff3 x2 K# h* M# q- M
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
" N% l! n2 |5 q( U& B: s& c$ S4 ?
7 o5 O  ~5 Y1 p( i请打help cheatinit命令获得更加详细说明9 O7 i$ D. C5 O0 c% |5 B8 L

7 m. J9 G* R4 J# J8 Y9 U2 Tcheatnext <condition>[,<comparisonvalue>]
" v. I1 {3 B- e- s8 X<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
' _% k1 G9 G/ x' E3 \[eq]是等于
( I" a& ?! p$ m% x% n% c[ne]是不等于
% ?! g/ c: P: X7 ~$ @7 ~[de或-]是减少  q2 [" d# q' b+ x
[in或+]是增加
' X- U  Q% q* d' r: D+ C8 ?[deeq]是减少或等于
# K1 O( B7 S" U, c  n[ineq]是增加或等于: l+ a9 p4 j5 ?7 [9 R* \
[lt]是小于1 ^9 Y, ?* r9 ]9 U( `
[gt]是大于- k" Z. |/ u- [& Y% `% s
[ch或~]是数据有变化8 l# u: b/ {8 ^+ c8 I. e& ^) O

5 J: I( g7 |* r% l3 ~4 P0 |+ A+ f# I<comparisonvalue>
5 ~2 q9 Y$ }7 D4 T3 j要搜索的数值
$ C8 c/ [7 p+ N$ V2 W
) q$ t) T! X4 T" p请打help cheatnext命令获得更加详细说明4 |2 }' o, R! B) J; M0 z
  |/ ~6 N$ F0 E' u- M7 L2 b
cheatnextf <condition>[,<comparisonvalue>]
- K$ q" e) V9 |/ d6 g  I( U说明同上6 K  H. Q. e9 h* t7 f8 H6 K

5 s4 s- U( M; V/ R8 y- E. W" h0 O请打help cheatnextf命令获得更加详细说明- _% a4 e  }% `+ P

" T) ~; h7 i% M( l- Q5 \cheatlist [<filename>]# a/ E/ z  g7 Y" G; j3 j  m" ~
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
  [: p7 k9 ^4 s0 n+ I( m' S1 k; y+ U$ ^3 C% O4 F* n
请打help cheatlist命令获得更加详细说明
, B5 w! C8 j/ v$ B; H! H+ d8 g/ W; y9 V5 o2 y
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化# R# O% U# E* ~' k9 v" \
! r$ \, i, ?. H6 X/ H
之后进行第一次数据搜索时要用cheatnextf命令来摸索$ P- M' V9 T, e, o" H
4 G' N0 Q/ Y" f4 I: l* ]1 C5 q
到第二次、第N次数据搜索时要用cheatnext命令来搜索" |! A$ t6 M  \; m" {
( T1 C9 R( N7 R$ k
举个例子吧:
& X$ }1 J6 `- X6 l1 I
1 f% r) A: ?( {. ^3 G! T以合金弹头X为例:6 a/ w  X6 A, n. A5 t
1P生命数是2
( }  F( Q2 p$ X* h
) L3 o# h+ }  x先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
; ?, [4 y8 U" {2 [8 R2 w( R/ X5 p% _  P  o; @
命令如下:
6 h, W' {# [1 j+ U7 echeatinit ub,0x100000,0xfffff,0
- n9 f5 ~$ t6 `$ R7 N% Y% g2 w. G; W) b; {6 a' g7 S
再用cheatnextf eq,2命令搜索生命数26 }% x; l: K" Z" Q
7 c* t( t" I2 Q, ^1 v* r
cheatlist显示搜索结果
4 Z3 ?5 {( `; z1 V' Y8 q' k
- X, w% M- F# v# f) J( s死一命后用cheatnext eq,1搜索生命数17 x+ _: E$ w' w% b3 f" w
5 P; h% [, Y6 g  z, u
cheatlist显示搜索结果* C" h- U' ~6 }, z" a8 N8 N
.......
5 w, Q( `1 s3 Q3 y% ^3 ~% D1 R( _直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果
1 F$ `% |5 ]# A0 n! C- i% ]( U2 M6 n/ R2 T! i. b
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
* r1 k; I" J/ @. C' F
' p% ~/ B1 v+ \没作弊码的话....& H& I& M1 T1 g9 O4 I- u4 C
* J8 P, x/ W% V6 R, M' t- d7 O
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
2 X* O: t3 P8 I& l1 C8 N- d6 @, s. Z; {0 c8 o) k" Z
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)1 d' Y) S! F" G8 f& Y7 \
5 P9 n9 g, U8 F  J
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
- s( d1 F- a0 _
& n( Q; R% d1 F$ ^/ G* F& V  J要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

0 e4 n; p" a1 h9 u9 J, `# L. F7 C0 g: b
回114:4 D& s! T$ e; W/ {* k2 a
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
* b/ P: c! A1 s1 M% j7 U: ?2.没地址如何查询地址?看上面我给zsyf的回复

0 @: {+ L1 ], u0 ~2 z& L* E
+ A" R& J  E: N3 r8 r打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3043 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-16 19:47 , Processed in 1.100586 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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