EMU618社区

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

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

  [复制链接]

签到天数: 2156 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。# A: V! Y" T* i# m9 S- @
2 T0 l/ a; _3 h9 ?3 w0 Y3 `7 D
(1)如何加载ROM
* [, o% S  i+ w6 A3 E
) L" N4 I7 n2 a# G先说说如何加载ROM吧2 B! N, ^' {9 e" q( `+ d% b# b

: |) S5 Q; Z4 Y# F& h以MAME 0.148 DEBUG版为例:7 e" l0 o3 ^% C5 K2 u( `& g. D8 D

/ j$ b+ b9 F+ C  [1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html0 z5 \4 F) S& w' N  _6 a* `
/ n% Q$ ~' W3 l4 y
注:MAME官网的MAME是命令行程式,没有GUI。1 C, l$ E0 R* X+ ?% O
+ `1 I; i# g* M8 x6 w$ z5 U
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;' p+ Z$ k( E2 \3 E: g

  q/ I) R0 t! ?9 Q% g/ }) _3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:2 h1 C! J5 W) f+ u! ]* o) D
8 P2 J4 t& ?3 y+ R% n' ^/ k
d:回车
( |* [, z8 ~! u
& w* u, ^5 }- P% Ecd mame0148b_debug回车
/ q" g2 Y/ ?* |9 _, n2 A+ c- s4 Q0 W2 e$ R- R
如图1:1 |/ @  Q( ]# ^8 i5 h. O5 D
) u# ]% `4 X, E

; m/ U0 D6 M+ j4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:' ^& ~. T% E% B( _; f

7 P; ^; L: J, r& ]& s9 l4 C' E5 u* |; N; c& H% `0 c% G
/ D; S: p% c" f- d
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;" ]1 T$ d6 H* D
7 T5 i) q, P3 C: O
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
9 O4 W& c, a) b9 z4 O) s+ {3 T1 @4 c6 C8 e3 O
(2)如何呼出/隐藏调试窗口& p- J7 N8 @! i, b2 x; w6 A2 Q

% H. z: w) A+ l  r6 m1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
* d. q0 [8 T2 c- N* r/ T* o4 P' X) a0 [% N  V$ Q1 N  b8 I5 W
! q/ ]8 g% t. x/ }+ R) p
" L8 m  Q1 _! N- X; R' _8 d) h5 T, n
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
! ?  a/ f9 n8 {" m& A- h' E$ y$ V% Y; w7 c1 K  G
3 q3 j$ L7 B/ U" G' S1 h

* `; O* U0 w( ]+ g) \3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。7 T& j. q' b1 K" F; V
) ~  F& o. v0 c" O, x" Q2 A' U
(3)如何下读/写内存监视点以及程式地址断点
' E& u3 A# m1 U# U+ {+ T3 Y7 s  J8 k% w5 x7 J( S% [
先说说如何下读/写内存监视点吧
' R2 s& u& E, t6 B8 ^, Y: |% A: o3 p; B
监视点命令格式:wp <address>,<length>,<type>,<condition>
1 B# a" P3 f1 E, ^, a
* r& u( `. C0 b1 X6 n! a' U<address>是地址  f# H9 ?2 H& p% K
- P5 E% d) b6 |; Z3 q
<length>是数据长度,长度必须用十六进制表示' U  D& n- y  w) N7 d0 x, p) i) ^
! S6 u! d4 T' G( ^2 _$ [1 \
<type>是监视点类型,r是读,w是写,rw是读写9 F/ k/ P8 P+ x. K. Z/ |( `' o8 ]
5 v8 J0 K* g4 A
例子:! A: H6 G8 T. u9 i1 [5 h  ^
8 f6 F* U# `6 m4 R
例如对ff8569地址下写监视点,数据长度是1个字节
  H0 o& `. g! U: w* c& e$ Q$ C1 _4 [$ x
wp ff8569,1,w- E) [; G4 r0 x; D6 ]
1 \' Y. K: O' |9 R$ n5 S4 k
例如对ff2235地址下读监视点,数据长度是2个字节( B) a6 l" N. O( f) m9 n& H

# J" g' J8 q' x( Owp ff2235,2,r
' K# Q( z7 \, e; {: K) S. |$ |9 I! J* ^0 {
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断. ]1 F( r4 g7 W: _/ w% O- E, i& a

6 X, h- \3 [) `" g3 ^wp ff7533,1,w,wpdata == 0
% E, J% M; K3 r4 C. g- r( O( g0 u* k  n
以龙王战士日版为例:' y  n2 ^0 W2 b4 {
# t" r8 f- P) z/ o# U' W
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:7 n" ~8 z+ c+ P

4 x8 b$ M+ B& ~! h$ A
7 C0 n3 u: Q" c( H/ I* ]
) M1 z) z7 o# V/ Z! ~+ h: n' n. Y
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
- q8 c7 X( }5 k; U2 u$ _& s' N3 o: s, j3 \
& V9 ~: z% u( f: |6 j" y
+ E' f# E$ J0 A1 k  x- o
接下来说说程式地址断点
6 C  I" N$ P* G8 G) y/ N9 L9 p" W1 G2 ]! k
命令格式:bp <address>1 r" l+ B, K+ W  U' L3 q3 o( z

5 t1 Z$ ~+ ^) p例如对000488汇编指令地址下断点
; ]! J( A: Z, k- N& I0 V8 h8 p- n- a5 a. B4 e3 r+ @9 Y) S( A
bp 0004880 F6 o6 z  q3 ^: s, J- F" ]3 q0 y
+ |9 ~3 r) T9 L! ~/ Q9 `  E
当程式执行到000488地址时就自动中断0 m% n4 f4 j! |+ ]1 c$ b

9 e) M* l6 i* k- Q: J更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看( w: i9 c, E; p/ z7 O
6 S( B% q0 L, p2 M  t2 x( X$ P
有错误请指正。
) H2 w: S6 A" O4 k4 q" R) ?: _
- g( `4 `- I1 O: ?3 D补充一些命令:9 X: ?! T6 B, I$ @; m- |! r

. F' Z/ T/ s( v% K! S* `, c"wpclear" 清除所有监视点4 ], t; f( ]2 A3 ~$ N
"wpenabld 数字" 开启监视点+ e8 T: R! O. Q0 S
"wpdisabld 数字" 关闭监视点: z; k( j: v8 M
"wplist" 显示所有监视点
! ]$ R/ x8 B1 J8 V5 }* T. s* D
4 g" [1 k* R% k/ J' M, m"bpclear" 清除所有断点* s6 @9 b( L$ L$ J! B
"bpenabld 数字" 开启断点
$ _4 d$ U1 ~! Y0 F$ ]9 Y2 E/ k0 e"bpdisabld 数字" 关闭断点
& j4 G9 w( x! f8 c6 l& l"bplist" 显示所有断点3 g8 t6 x: o/ n: q8 X5 F

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3600 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽
) K* \0 {% m9 J) B% E+ }% I
$ Y( `0 {3 }7 d  g( L" @. i以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2156 天

[LV.Master]伴坛终老

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

签到天数: 2583 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
# p* E5 ^  R; n. S, u
. M* C7 [* @( h) r( A太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
/ ]( S% f1 `* F0 u' C9 o# l! z2 K+ F) _2 a4 f9 L; k
其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑   }# S$ }, }. t; ^2 Y& r, G
: F+ P* E/ D3 c1 n7 |
CheatEngine搜到的临时地址当然无法对应MAME的内存地址( s1 f; \: O% z2 G1 b
1 b/ j+ g, L; l, [
新版MAME没搜索引擎了么?2 Q3 `% R& V) v& o# y1 U
晚上我看看* [) F" W; Y: a* L9 R+ n

3 |2 x# y$ q* I& hMAME查看地址的功能还是有的6 b: }" z0 p9 L5 x  ^9 p
菜单里的第一个选项就是显示内存地址
. f% S4 A4 N' Z; N2 m不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2156 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:. l- R4 B* f0 ^) E) K
1.DEBUG版MAME有作弊码查找命令$ o; }; O) t4 m

7 i/ N0 |4 ]7 J: {8 c" h命令如下:9 U7 E' ?* O- q" E6 O* g1 }% @
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]7 z. x6 a+ s' ^; v5 _+ [1 K3 o6 l
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
8 A2 S0 D5 Y; p<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
+ g1 p, f8 Z7 u# I<swap>是决定字节是否交换3 Z2 V3 x& u  r$ ~& A
<address>是地址,地址必须用十六进制表示,例:0x100248( w/ U" B3 H# e- g& N/ @+ q! x
<length>是地址长度,长度必须用十六进制表示,例:0xfffff' U: S2 w. P, h
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
0 t; w9 k3 M8 I: n7 q" r
4 X& Y: e. d2 d" A# Z# v请打help cheatinit命令获得更加详细说明
$ V4 D. B: T' J) Y* T; _# S8 Q0 Z1 E. v9 l! p& A2 H/ \7 k
cheatnext <condition>[,<comparisonvalue>]
$ M+ R( ?2 W8 J: K# M; |' B<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]
. r9 x# F! \0 L  t' s1 E[eq]是等于1 y1 v& S8 n9 \+ c: D
[ne]是不等于0 B( a: C& H0 D
[de或-]是减少7 _5 @  M" W1 o# B4 U' R
[in或+]是增加
& P. V$ W: V" N/ ?! p0 n* o- M[deeq]是减少或等于
0 P) `: d6 x* u( m[ineq]是增加或等于
* g- z# b% G( y) H( w6 [[lt]是小于& p2 Y0 T9 |" \* S
[gt]是大于. [( F- F: H# D' g% U$ y
[ch或~]是数据有变化: N3 G$ G% F: Q; j
6 A4 }- u3 F2 P- B! Z# P* d
<comparisonvalue>9 ?) F2 x' x, {- x' b' y8 N: P7 Q
要搜索的数值9 A% R2 P( N3 R% L' O1 u

; ^6 Y# I0 K- D# s: ]/ Z$ V请打help cheatnext命令获得更加详细说明% q! V1 w' _1 s9 T, `7 n

' |; ?1 Z- [3 z' |. ccheatnextf <condition>[,<comparisonvalue>]
" a! Y; S. L  b% z% c; d$ Y说明同上) k: W6 S6 j2 n: x4 y9 M

3 [3 c$ I& j6 ?% I请打help cheatnextf命令获得更加详细说明' b  a% }- c; h6 v3 Q+ U

, k" r- a6 p, @cheatlist [<filename>]
) Q; Y+ K$ P' ]; M' @& I: D显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
# c6 T( N4 f9 j  g2 y. A' f# ]. z  z& @3 q) S8 K+ \# ]6 d# \/ U
请打help cheatlist命令获得更加详细说明
' U! _% w" }: |3 D/ r
) h; q8 \: N3 H5 d$ ?7 d: y; M第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化; r: I4 |1 j0 |, N

% o7 t! X0 b1 s之后进行第一次数据搜索时要用cheatnextf命令来摸索; o7 \8 ~& d7 c6 n& W1 |

' `' c0 s( h6 C/ X到第二次、第N次数据搜索时要用cheatnext命令来搜索8 n2 e8 z# k" L

# Y2 I; U4 `8 k: `) x" N  ?举个例子吧:: o3 @$ D8 Q3 F: w

8 x3 {/ K" h* _) A8 P3 a以合金弹头X为例:- D3 \- s1 F, ^! Q1 n7 |3 {9 w
1P生命数是2
0 w. B1 G  y: j, t+ }: s3 a2 a
) r6 }( R) Z8 H先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间# x( b- L7 q# t# H% r$ H6 F

9 @! E+ q' \( ^, K; u- K3 N, @命令如下:
- n+ O3 n% J9 d3 r* D6 Ccheatinit ub,0x100000,0xfffff,0
3 Y; r  N/ v5 s: ^: T+ r# l$ H7 J: k% ?5 k  d
再用cheatnextf eq,2命令搜索生命数2
$ v( O. f) L* D0 A3 e- o! u9 o/ [$ X
cheatlist显示搜索结果& J) R  Q5 m) x) ?0 Y

7 r1 v, g1 d9 G- X9 ~死一命后用cheatnext eq,1搜索生命数1
/ d- q. x" E8 g: E. K) g. U. g  ~8 ]# ]* h0 Z6 H
cheatlist显示搜索结果9 g9 I8 n$ Z* C
.......6 W& Z6 T. l0 k3 j
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果0 x6 t" b9 P/ ]
/ o* Q( G& l4 k. \2 L2 ~
还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。/ o8 D% v1 ]) t; o
* T& G3 `* x5 M% r/ x# s
没作弊码的话....
" f. Z3 b7 v! i" I* C
5 z1 m& q* I3 Q. D+ o不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)" z* O' I2 x' P2 T8 X5 m- H  [
3 x# r0 R  a9 A
或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
2 ?+ u5 Q5 }. U8 Z5 h. u9 D: I8 k2 w8 T" A" O$ y) w+ |
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
/ Z' q. \3 E& a+ q
; U5 w% Z: X$ q8 _4 Y1 W要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
8 H# ^" |2 Q1 ?, g( c8 G% x
. d/ j: j5 T9 D3 G. T. H% I5 z
回114:
+ ~3 I: J, w% @
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)1 m1 @9 c% |" [' p* {
2.没地址如何查询地址?看上面我给zsyf的回复

* W$ P1 M% @' W+ k
1 y. M0 s) F7 _/ q9 \# v/ H打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3120 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-10 05:53 , Processed in 1.099609 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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